Cách xử lý ngoại lệ trong Python

Cách xử lý ngoại lệ trong Python

Xử lý ngoại lệ là khả năng bạn tùy chỉnh và hiển thị thông báo lỗi cho các phần của chương trình không hoạt động.





Cho dù bạn đang xây dựng trang web, tạo API, mô-đun hoặc bất kỳ sản phẩm nào khác bằng Python, khả năng xử lý hiệu quả các trường hợp ngoại lệ cho phép bạn nêu rõ nguyên nhân gây ra lỗi.





Ở đây, chúng ta sẽ xem xét cách bạn có thể xử lý các ngoại lệ trong Python.





Cách xử lý ngoại lệ hoạt động trong Python

Khi bạn nêu ra các ngoại lệ, bạn đang yêu cầu Python hiển thị một thông báo bất cứ khi nào một khối mã bị lỗi. Xử lý ngoại lệ giống như bảo ai đó thử nâng tạ. Và nếu họ không thể, họ nên cho bạn biết.

Tuy nhiên, để nêu ra một ngoại lệ trong Python, bạn sẽ yêu cầu Python thử và chạy một khối mã cụ thể. Nếu khối đó không thành công, thì bạn có thể yêu cầu Python nêu ra một ngoại lệ đã xác định cho mã không thành công.



Khi nào bạn nên sử dụng ngoại lệ trong lập trình Python?

Trong hầu hết các trường hợp, bạn có thể che dấu các lỗi Python tiêu chuẩn bằng cách sử dụng các ngoại lệ. Nhưng bạn cần phải cảnh giác, vì làm điều này có thể gây ra sự cố gỡ lỗi. Do đó, bạn có thể khó tìm ra nguyên nhân gốc rễ của một lỗi cuối cùng.

Do đó, bạn nên sử dụng các ngoại lệ khi bạn đã kiểm tra đầy đủ mã của mình và bạn chắc chắn rằng nó hoạt động. Cuối cùng, cách tốt nhất là sử dụng chúng để xử lý các lỗi tiềm ẩn có thể phát sinh từ phía người dùng thay vì chính mã.





Nói cách khác, bạn có thể sử dụng ngoại lệ như một công cụ cảnh báo để hướng dẫn người dùng cách sử dụng chương trình của bạn.

Xử lý ngoại lệ Python

Để xử lý các ngoại lệ trong Python, trước tiên bạn cần bọc mã của mình trong một thử ... ngoại trừ khối. Đôi khi, bạn có thể cần bao gồm cuối cùng tuyên bố để xử lý các hành động khác, tùy thuộc vào nhu cầu của bạn.





Khái niệm mã hóa của các ngoại lệ trong Python thường trông như thế này:

try:
'code to be executed'
except:
'error message'

Như đã đề cập trước đó, bạn cũng có thể sử dụng cuối cùng trong một khối ngoại lệ. Nhưng mã bạn viết bên trong cuối cùng mệnh đề độc lập và chạy cho dù có ngoại lệ hay không.

Về bản chất, sẽ rất hữu ích nếu bạn có một khối mã khác mà bạn muốn chạy liên tục bất kể điều gì xảy ra trong thử ... ngoại trừ khối.

Đây là một ví dụ:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

Trong đoạn mã trên, hay khởi động lại chạy liên tục, bất kể có ngoại lệ hay không.

Một khác điều kiện cũng có thể tuân theo một ngoại trừ tuyên bố:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

Bây giờ hãy thử lại với 'B' được xác định:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

Các ví dụ trên là các trường hợp ngoại lệ không chuẩn hóa. Nhưng bạn có thể có một ngoại lệ rõ ràng hơn khi bạn kết hợp các ngoại lệ được tích hợp sẵn (đã xác định) với các ngoại lệ không được chuẩn hóa:

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

Ngoại lệ ở trên trước tiên kiểm tra xem có NameError bên trong cố gắng khối. Sau đó nó sẽ in tiêu chuẩn NameError ngoại lệ đầu tiên ('tên' B 'không được xác định'). Và hỗ trợ nó với ngoại lệ bằng văn bản của bạn ('B cần được xác định, vui lòng').

Liên quan: Nguyên tắc lập trình cơ bản mà mọi lập trình viên phải biết

phần mềm lập bản đồ tư duy miễn phí tốt nhất 2018

Và nếu bạn muốn xử lý một chuỗi các trường hợp ngoại lệ, bạn cũng có thể đi kèm với cố gắng khối với nhiều ngoại trừ các câu lệnh. Điều này khá tiện dụng nếu cố gắng khối có khả năng có nhiều ngoại lệ:

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

Nếu phép chia hợp lệ thì sao? Ví dụ, thay thế F = 7/0 trong đoạn mã trên với F = 7/5 cho:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Ngoại lệ do người dùng xác định trong Python

Bạn cũng có thể đưa ra ngoại lệ của mình và gọi cho họ sau trong chương trình của bạn. Điều này cho phép bạn đưa ra một mô tả cụ thể về ngoại lệ của mình và đặt tên nó theo ý muốn.

Tuy nhiên, mọi ngoại lệ do người dùng xác định (trực tiếp hoặc gián tiếp) vẫn đến từ phần mềm cài sẵn Ngoại lệ lớp của Python.

Mã ví dụ dưới đây tham chiếu đến cơ sở Ngoại lệ trực tiếp bằng cách gọi điện Lỗi runtime từ nó:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

Lưu ý rằng lỗi kết nối , trong trường hợp này, là một lớp do người dùng xác định, bạn có thể nâng cấp bất cứ lúc nào bạn cần trong chương trình của mình.

Có liên quan: Hướng dẫn cho người mới bắt đầu về biểu thức chính quy với Python

Bạn có thể tạo một ngoại lệ do người dùng xác định bằng cách lấy nó trực tiếp từ Ngoại lệ lớp cơ sở. Tuy nhiên, ngoại lệ bên dưới ngăn phép trừ 5 từ 6 và gọi trực tiếp ngoại lệ từ lớp cơ sở:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

Trong thực tế, bạn có thể sử dụng một ngoại lệ mà bạn đã xác định trước đó bằng cách gọi nó trong một hàm khác. Ví dụ: bạn có thể tạo floatError điều đó chỉ cho phép thêm hai phao:

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Bởi vì bây giờ bạn đã xác định một FloatError lớp, Python nâng nó lên nếu bạn cố gắng thêm hai ký tự không float bằng cách sử dụng addtwoFloat hàm số.

Bạn có thể in FloatError trong cùng một tệp Python mà bạn đã tạo nó để xem điều gì sẽ xảy ra:

print(FloatError)
Output:

FloatError , tuy nhiên, không phải là một ngoại lệ Python tích hợp sẵn. Bạn có thể xác minh điều này bằng cách gọi FloatError trong một tệp Python mới khác mà bạn chưa tạo lớp này:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

Bạn nhận được một NameError bởi vì Python không nhận ra nó là một ngoại lệ tiêu chuẩn.

Bạn cũng có thể thử tự xác định các lớp lỗi khác để xem chúng diễn ra như thế nào.

Làm cho các chương trình Python của bạn thân thiện hơn với người dùng với các ngoại lệ

Có nhiều ngoại lệ tiêu chuẩn trong Python. Nhưng bạn cũng có thể xác định của bạn. Tuy nhiên, việc dễ dàng sử dụng chương trình của bạn ở một mức độ nào đó phụ thuộc vào cách nó xử lý các trường hợp ngoại lệ khác nhau (cho dù do người dùng xác định, không cụ thể hay tiêu chuẩn).

Tuy nhiên, ngoại lệ cho phép bạn ra lệnh chương trình của bạn sẽ hoạt động như thế nào khi người dùng tương tác với họ. Việc nêu rõ ràng và ngắn gọn nguyên nhân gây ra lỗi cũng giúp người dùng biết được họ đang làm gì sai và đôi khi, nó chỉ cho họ đi đúng hướng.

Đăng lại Đăng lại tiếng riu ríu E-mail Cách gỡ lỗi mã Python của bạn

Trang bị cho mình bí quyết để xử lý mọi lỗi Python trên đường dẫn của bạn.

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Python
  • Hướng dẫn viết mã
Giới thiệu về tác giả Idisou Omisola(Đã xuất bản 94 bài báo)

Idowu đam mê mọi thứ về công nghệ và năng suất thông minh. Trong thời gian rảnh rỗi, anh ấy chơi mã hóa và chuyển sang bàn cờ khi anh ấy buồn chán, nhưng anh ấy cũng thích thoát khỏi thói quen đôi khi. Niềm đam mê của anh ấy trong việc chỉ ra cho mọi người cách thức xung quanh công nghệ hiện đại đã thúc đẩy anh ấy viết nhiều hơn.

Xem thêm từ Idowu Omisola

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký