07/09/2018, 10:50

Sử Dụng Error Handling trong Python

Trong quá trình chạy phần mềm có thể có nhiều kiểu lỗi khác nhau xuất hiện. Và một điều thú vị của lập trình phần mềm đó là có một số lỗi xuất hiện mà chúng ta không thể dự đoán được cho tới khi chúng xuất hiện. Tuy nhiên bạn cũng không nên quá lo lắng về điều này bởi vì bạn cũng không cần phải ...

Trong quá trình chạy phần mềm có thể có nhiều kiểu lỗi khác nhau xuất hiện. Và một điều thú vị của lập trình phần mềm đó là có một số lỗi xuất hiện mà chúng ta không thể dự đoán được cho tới khi chúng xuất hiện. Tuy nhiên bạn cũng không nên quá lo lắng về điều này bởi vì bạn cũng không cần phải lường trước được mọi lỗi sẽ xuất hiện trong chương trình và trên thực tế đối với các chương trình phức tạp điều này là gần như không thể. Thay vào đó khi code bạn chỉ cần sử dụng một tính năng mà hầu hết các ngôn ngữ lập trình đều có đó là error handling. Vậy tính năng này là gì và nó mạnh mẽ như thế nào, chúng ta hãy cùng nhau tìm hiểu cách sử dụng tính năng này trong Python.

Error Handling trong Python

Chúng ta bắt đầu bằng việc viết một chương trình đơn giản trong đó định nghĩa một hàm tính tổng của hai số và in ra kết quả như sau:

def addNumbers(a, b):
    print a + b

addNumbers(5, 10)

Khi chạy chương trình này bạn sẽ nhận được kết quả hiển thị là 15. Mọi thứ đúng như bạn tính toán. Tuy nhiên điều gì xảy ra nếu như ở đâu đó trong chương trình có một đoạn code gọi hàm addNumbers như sau:

addNumbers(', 10)

Do số hạng đầu tiên trong tổng là một đối tượng kiểu chuỗi nên phép toán cộng hai số lúc này sẽ không hợp lệ và bạn sẽ thấy lỗi sau xuất hiện khi chạy chương trình:

Traceback (most recent call last):
  File "addNumbers.py", line 6, in <module>
    addNumbers(', 10)
  File "addNumbers.py", line 2, in addNumbers
    print a + b
TypeError: cannot concatenate 'str' and 'int' objects

Tới đây bạn có thể nghĩ rằng chúng ta nên thêm vào một biểu thức điều kiểm tra kiểu dữ liệu của đối số truyền vào hàm addNumbers xem có phải thuộc kiểu dữ liệu chuỗi hay không. Mặc dù cách này có thể giải quyết được lỗi trên tuy nhiên vẫn có các trường hợp khác ví dụ như người dùng truyền vào kiểu dữ liệu khác với kiểu integer và string hay một lý do bất kỳ nào khác. Để xử lý triệt để trường hợp này chúng ta sẽ sử dụng tính năng error handing với try và except trong Python.

Sử Dụng Try và Except

Hai câu lệnh try và except trong Python được dùng để xử lý lỗi chương trình và luôn đi kèm với nhau. Đoạn code cần được thực thi sẽ được đặt trong try nếu như không có lỗi nào thì đoạn code trong except sẽ được bỏ qua ngược lại nếu như có lỗi thì đoạn code được đặt bên trong except sẽ được thực thi.

Với ví dụ tính tổng hai số nếu sử dụng try và except trong Python mã lệnh sẽ như sau sẽ :

def addNumbers(a, b):
    try:
        return a + b
    except Exception as e:
        return 'Lỗi : ' + str(e)

print addNumbers(', 10)

Ở đoạn mã trên đối tượng e ở câu lệnh except chứa thông tin của lỗi xảy ra trong chương trình. Ví dụ này đơn giản hoá việc hiển thị thông báo lỗi chương trình bằng việc chuyển tượng này về dạng string và thêm chuỗi Lỗi: vào phía trước rồi sau đó hiển thị kết quả:

return 'Lỗi : ' + str(e)

Tất nhiên bạn hoàn toàn có thể tuỳ chỉnh thông báo lỗi theo ý của bạn sao cho phù hợp.

Kết Luận

Tới đây bạn có thể nói rằng cách làm trên là phức tạp hoá vấn đề vì chỉ cần thêm vào dòng lệnh kiểm tra dữ liệu của đối số nhập vào xem có phải là integer hay không trước khi thực hiện phép tính tổng hai số. Lập luận này hoàn toàn hợp lý, tuy nhiên ví dụ này chỉ thể hiện một phần nhỏ của cách sử dụng try và except trong Python. Trong thực tế một hàm có thể phải xử lý logic mà yêu cầu việc gọi một hoặc nhiều hàm khác và các hàm được gọi này lại phụ thuộc vào một hoặc nhiều hàm khác nữa... Như vậy lỗi có thể xuất hiện ở bất cứ đâu trong một trong các hàm này, lúc đó việc sử dụng try và except trở nên đặc biệt hữu ích.

Với việc sử dụng error handing như trên, ngay cả khi chúng ta không biết được hết các lỗi tiềm ẩn có thể sẽ xuất hiện trong chương trình là gì tuy nhiên chúng ta vẫn tự tin rằng chương trình sẽ luôn được thực thi và nếu có lỗi thì chương trình sẽ hiển thị một thông báo hiển thị mà nội dung của nó được chính chúng ta chủ động viết trong chương trình.

0