Trước hết, có những ngoại lệ mà bạn muốn chúng phá vỡ mã của bạn [vì khi lỗi này xảy ra, mã của bạn sẽ không hoạt động!] Và các ngoại lệ bạn muốn nắm bắt âm thầm/mượt mà. Hãy thử phân biệt chúng. Bạn có thể không muốn nắm bắt tất cả các trường hợp ngoại lệ!
Thứ hai, thay vì nắm bắt mọi thứ, bạn có thể dành thời gian và trải qua các bản ghi của quy trình của bạn. Giả sử bạn đang nhận được một ngoại lệ khác/bên thứ ba, ví dụ từ nhà cung cấp dịch vụ đám mây như GCP. Trong nhật ký, bạn có thể tìm thấy ngoại lệ bạn đang nhận được. Sau đó, bạn có thể làm một cái gì đó như thế này:
from google.api_core.exceptions import ServiceUnavailable, RetryError
for i in range[10]:
try:
print["do something"]
except ValueError:
print["I know this might happen for now at times! skipping this and continuing with my loop"
except ServiceUnavailable:
print["our connection to a service [e.g. logging] of gcp has failed"]
print["initializing the cloud logger again and try continuing ..."]
except RetryError:
print["gcp connection retry failed. breaking the loop. try again later!]
break
Đối với phần còn lại [lỗi có thể hoặc không thể xảy ra], tôi sẽ rời khỏi phòng để mã của mình bị sập nếu tôi có một ngoại lệ bất ngờ! Bằng cách này, tôi có thể hiểu những gì đang xảy ra và cải thiện mã của tôi bằng cách nắm bắt các trường hợp cạnh.
Nếu bạn muốn điều này không bao giờ gặp sự cố vì một số lý do, ví dụ nếu đó là mã được nhúng trong phần cứng từ xa mà bạn không thể dễ dàng truy cập, bạn có thể thêm một người bắt ngoại lệ chung ở cuối:
except Exception as e:
print[f"something went wrong! - {e}"]
Bạn cũng có thể xem xét phân cấp ngoại lệ Python 3 ở đây. Sự khác biệt giữa Exception
và BaseException
là, Exception
sẽ không bắt được
except Exception as e:
print[f"something went wrong! - {e}"]
1, except Exception as e:
print[f"something went wrong! - {e}"]
2 hoặc except Exception as e:
print[f"something went wrong! - {e}"]
3 Trong bài viết này, chúng tôi sẽ thảo luận về cách bắt tất cả các ngoại lệ trong Python bằng cách sử dụng thử, ngoại trừ các câu lệnh với sự trợ giúp của các ví dụ thích hợp. Nhưng trước khi cho phép, hãy xem các loại lỗi khác nhau trong Python.
Nhìn chung có hai loại lỗi trong Python, tức là lỗi cú pháp và ngoại lệ. Hãy cùng xem sự khác biệt giữa họ.
Sự khác biệt giữa lỗi cú pháp và ngoại lệ
Lỗi cú pháp: Như tên cho thấy lỗi này là do cú pháp sai trong mã. Nó dẫn đến việc chấm dứt chương trình. As the name suggests this error is caused by the wrong syntax in the code. It leads to the termination of the program.
Ví dụ: Lỗi cú pháp trong Python
Python3
except Exception as e:
print[f"something went wrong! - {e}"]
4except Exception as e:
print[f"something went wrong! - {e}"]
5 except Exception as e:
print[f"something went wrong! - {e}"]
6except Exception as e:
print[f"something went wrong! - {e}"]
7except Exception as e:
print[f"something went wrong! - {e}"]
8except Exception as e:
print[f"something went wrong! - {e}"]
9SyntaxError: invalid syntax0
SyntaxError: invalid syntax1
SyntaxError: invalid syntax2
SyntaxError: invalid syntax3
SyntaxError: invalid syntax0
Output:
SyntaxError: invalid syntax
Các trường hợp ngoại lệ: Các ngoại lệ được nêu ra khi chương trình đúng về mặt cú pháp, nhưng mã dẫn đến lỗi. Lỗi này không ngăn chặn việc thực hiện chương trình, tuy nhiên, nó thay đổi luồng thông thường của chương trình. Exceptions are raised when the program is syntactically correct, but the code resulted in an error. This error does not stop the execution of the program, however, it changes the normal flow of the program.
Ví dụ: Ngoại lệ trong Python
Python3
SyntaxError: invalid syntax5
except Exception as e:
print[f"something went wrong! - {e}"]
5 except Exception as e:
print[f"something went wrong! - {e}"]
6SyntaxError: invalid syntax8
except Exception as e:
print[f"something went wrong! - {e}"]
5 SyntaxError: invalid syntax5
ZeroDivisionError: division by zero1
ZeroDivisionError: division by zero2
SyntaxError: invalid syntax1
ZeroDivisionError: division by zero4
Output:
ZeroDivisionError: division by zero
Hãy thử và ngoại trừ tuyên bố - Bắt tất cả các ngoại lệ
Hãy thử và ngoại trừ các câu lệnh được sử dụng để bắt và xử lý các ngoại lệ trong Python. Các tuyên bố có thể nêu ra các ngoại lệ được giữ bên trong mệnh đề thử và các câu lệnh xử lý ngoại lệ được viết bên trong ngoại trừ mệnh đề. are used to catch and handle exceptions in Python. Statements that can raise exceptions are kept inside the try clause and the statements that handle the exception are written inside except clause.
Ví dụ: Python bắt tất cả các trường hợp ngoại lệ
Python3
SyntaxError: invalid syntax8
except Exception as e:
print[f"something went wrong! - {e}"]
5 ZeroDivisionError: division by zero7
ZeroDivisionError: division by zero8
ZeroDivisionError: division by zero9
Second element = 2 An error occurred0
ZeroDivisionError: division by zero9
Second element = 2 An error occurred2
Second element = 2 An error occurred3
Second element = 2 An error occurred4
Second element = 2 An error occurred5
Second element = 2 An error occurred6
SyntaxError: invalid syntax1
SyntaxError: invalid syntax2
Second element = 2 An error occurred9
try: # statement[s] except IndexError: # statement[s] except ValueError: # statement[s]0
try: # statement[s] except IndexError: # statement[s] except ValueError: # statement[s]1
ZeroDivisionError: division by zero8
try: # statement[s] except IndexError: # statement[s] except ValueError: # statement[s]3
Second element = 2 An error occurred6
SyntaxError: invalid syntax1
SyntaxError: invalid syntax22____57
try: # statement[s] except IndexError: # statement[s] except ValueError: # statement[s]0
try: # statement[s] except IndexError: # statement[s] except ValueError: # statement[s]1
Second element = 2 An error occurred2
try: # statement[s] except IndexError: # statement[s] except ValueError: # statement[s]3
ZeroDivisionError Occurred and Handled2
Second element = 2 An error occurred5
Second element = 2 An error occurred6
SyntaxError: invalid syntax1
SyntaxError: invalid syntax22
ZeroDivisionError Occurred and Handled7
SyntaxError: invalid syntax0
Đầu ra
Second element = 2 An error occurred
Trong ví dụ trên, các câu lệnh có thể gây ra lỗi được đặt bên trong câu lệnh thử [câu lệnh in thứ hai trong trường hợp của chúng tôi]. Câu lệnh in thứ hai cố gắng truy cập vào phần tử thứ tư của danh sách không có và điều này ném một ngoại lệ. Ngoại lệ này sau đó bị bắt bởi tuyên bố ngoại trừ. Không chỉ định bất kỳ loại ngoại lệ nào, tất cả các ngoại lệ gây ra trong khối thử sẽ bị chặn bởi khối ngoại trừ. Chúng tôi cũng có thể bắt được một ngoại lệ cụ thể. Hãy cùng xem cách làm điều đó.
Nắm bắt ngoại lệ cụ thể
Một câu lệnh thử có thể có nhiều hơn một điều khoản ngoại trừ mệnh đề, để chỉ định trình xử lý cho các ngoại lệ khác nhau. Xin lưu ý rằng nhiều nhất là một người xử lý sẽ được thực thi. Ví dụ: chúng ta có thể thêm IndexError vào mã trên. Cú pháp chung để thêm các ngoại lệ cụ thể là -
try: # statement[s] except IndexError: # statement[s] except ValueError: # statement[s]
Ví dụ: Bắt ngoại lệ cụ thể trong Python
Python3
ZeroDivisionError Occurred and Handled9
NameError Occurred and Handled0
Second element = 2 An error occurred6
except Exception as e:
print[f"something went wrong! - {e}"]
7 NameError Occurred and Handled3
NameError Occurred and Handled4
Second element = 2 An error occurred5
NameError Occurred and Handled6
NameError Occurred and Handled77____15
NameError Occurred and Handled9
ZeroDivisionError: division by zero1
Exception
1Exception
2Second element = 2 An error occurred2
SyntaxError: invalid syntax020
Second element = 2 An error occurred6
SyntaxError: invalid syntax1
SyntaxError: invalid syntax2
Exception
8Exception
9Second element = 2 An error occurred4
Second element = 2 An error occurred5
Second element = 2 An error occurred6
BaseException
3Second element = 2 An error occurred2
SyntaxError: invalid syntax0
Second element = 2 An error occurred6
BaseException
3BaseException
8SyntaxError: invalid syntax0
ZeroDivisionError Occurred and Handled2
except Exception as e:
print[f"something went wrong! - {e}"]
01Second element = 2 An error occurred6
SyntaxError: invalid syntax1
SyntaxError: invalid syntax2
except Exception as e:
print[f"something went wrong! - {e}"]
05SyntaxError: invalid syntax0
ZeroDivisionError Occurred and Handled2
except Exception as e:
print[f"something went wrong! - {e}"]
08Second element = 2 An error occurred6
SyntaxError: invalid syntax1
SyntaxError: invalid syntax2
except Exception as e:
print[f"something went wrong! - {e}"]
12SyntaxError: invalid syntax0
Đầu ra
ZeroDivisionError Occurred and Handled
Trong ví dụ trên, các câu lệnh có thể gây ra lỗi được đặt bên trong câu lệnh thử [câu lệnh in thứ hai trong trường hợp của chúng tôi]. Câu lệnh in thứ hai cố gắng truy cập vào phần tử thứ tư của danh sách không có và điều này ném một ngoại lệ. Ngoại lệ này sau đó bị bắt bởi tuyên bố ngoại trừ. Không chỉ định bất kỳ loại ngoại lệ nào, tất cả các ngoại lệ gây ra trong khối thử sẽ bị chặn bởi khối ngoại trừ. Chúng tôi cũng có thể bắt được một ngoại lệ cụ thể. Hãy cùng xem cách làm điều đó.
NameError Occurred and Handled
Nắm bắt ngoại lệ cụ thể
Một câu lệnh thử có thể có nhiều hơn một điều khoản ngoại trừ mệnh đề, để chỉ định trình xử lý cho các ngoại lệ khác nhau. Xin lưu ý rằng nhiều nhất là một người xử lý sẽ được thực thi. Ví dụ: chúng ta có thể thêm IndexError vào mã trên. Cú pháp chung để thêm các ngoại lệ cụ thể là -For more information, refer to our Python Exception Handling Tutorial.