Ngoại trừ hoặc cuối cùng mong đợi python

Ngoại lệ là lỗi xảy ra trong quá trình thực hiện chương trình. Python sẽ không cho bạn biết về các lỗi như lỗi cú pháp (lỗi ngữ pháp), thay vào đó nó sẽ dừng đột ngột

Thoát đột ngột có hại cho cả người dùng cuối và nhà phát triển

Thay vì dừng khẩn cấp, bạn có thể sử dụng câu lệnh thử ngoại trừ để giải quyết vấn đề đúng cách. Việc dừng khẩn cấp sẽ xảy ra nếu bạn không xử lý đúng các trường hợp ngoại lệ

khóa học liên quan. Hoàn thành khóa học & bài tập lập trình Python

Ngoại lệ trong Python là gì?

Python có các ngoại lệ tích hợp có thể gây ra lỗi. Nếu xảy ra lỗi khi chạy chương trình, nó được gọi là ngoại lệ

Nếu một ngoại lệ xảy ra, loại ngoại lệ được hiển thị. Các ngoại lệ cần được xử lý nếu không chương trình sẽ bị sập. Để xử lý các ngoại lệ, khối

1
2
3
4
5
6
7 được sử dụng

Một số trường hợp ngoại lệ mà bạn có thể đã thấy trước đây là

1
2
3
4
5
6
8,
1
2
3
4
5
6
9 hoặc
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')
0 nhưng còn nhiều trường hợp khác nữa

Tất cả các ngoại lệ trong Python kế thừa từ lớp BaseException. Nếu bạn mở trình bao tương tác Python và nhập câu lệnh sau, nó sẽ liệt kê tất cả các ngoại lệ tích hợp sẵn

 >>> dir(builtins)

Ý tưởng của mệnh đề try-ngoại trừ là xử lý các ngoại lệ (lỗi khi chạy). Cú pháp của khối try-ngoại trừ là

1
2
3
4
try:

except Exception:

Ý tưởng của khối try-ngoại trừ là thế này

Nó có thể được kết hợp với các từ khóa khác và cuối cùng

  • khác. Mã trong khối khác chỉ được thực thi nếu không có ngoại lệ nào được đưa ra trong khối thử

  • cuối cùng. Mã trong khối cuối cùng luôn được thực thi, bất kể có ngoại lệ nào được đưa ra hay không

Bắt ngoại lệ trong Python

Khối try-ngoại trừ có thể xử lý các ngoại lệ. Điều này ngăn việc thoát chương trình đột ngột do lỗi. Trong ví dụ dưới đây, chúng tôi cố tình đưa ra một ngoại lệ

1
2
3
4
5
6
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')

Sau khối ngoại trừ, chương trình tiếp tục. Nếu không có khối try-ngoại trừ, dòng cuối cùng sẽ không đạt được vì chương trình sẽ bị sập

 $ python3 example.py

Divided by zero
Should reach here

Trong ví dụ trên, chúng tôi bắt gặp ngoại lệ cụ thể ZeroDivisionError. Bạn có thể xử lý bất kỳ ngoại lệ như thế này

1
2
3
4
5
6
1
2
3
4
5
6
1

Bạn có thể viết logic khác nhau cho từng loại ngoại lệ xảy ra

1
2
3
4
5
6
2____13

khóa học liên quan. Hoàn thành khóa học & bài tập lập trình Python

thử ngoại trừ

Hãy làm một ví dụ thực tế về khối try-ngoại trừ

Chương trình yêu cầu người dùng nhập số. Thay vào đó, người dùng nhập các ký tự vào hộp nhập liệu. Chương trình thường sẽ bị sập. Nhưng với khối thử ngoại trừ, nó có thể được xử lý đúng cách

Câu lệnh thử ngoại trừ ngăn chương trình bị lỗi và xử lý đúng cách

1
2
3
4
5
6
1
2
3
4
1

Nhập dữ liệu không hợp lệ, làm cho chương trình tiếp tục bình thường

Ngoại trừ hoặc cuối cùng mong đợi python

Câu lệnh try ngoại trừ có thể được mở rộng với từ khóa cuối cùng, điều này sẽ được thực thi nếu không có ngoại lệ nào được đưa ra

1
2
3
4
2____53

Chương trình tiếp tục thực hiện nếu không có ngoại lệ nào được ném ra

Có nhiều loại ngoại lệ khác nhau. ZeroDivisionError, NameError, TypeError, v.v. Đôi khi các mô-đun xác định các ngoại lệ của riêng chúng

Khối try-ngoại trừ cũng hoạt động cho các lệnh gọi hàm

1
2
3
4
4
1
2
3
4
5

kết quả này

1
2
3
4
6

Nếu bạn là người mới bắt đầu, thì tôi đánh giá cao cuốn sách này

cố gắng cuối cùng

Một khối try-ngoại trừ có thể có mệnh đề cuối cùng (tùy chọn). Mệnh đề cuối cùng luôn được thực thi.
Ý tưởng chung là.

1
2
3
4
5
6
1
2
3
4
8

Ví dụ. nếu bạn mở một tệp, bạn sẽ muốn đóng nó, bạn có thể làm như vậy trong mệnh đề cuối cùng

1
2
3
4
9
try:

except Exception:

0

thử khác

Mệnh đề khác được thực thi khi và chỉ khi không có ngoại lệ nào được đưa ra. Điều này khác với mệnh đề cuối cùng luôn được thực thi

1
2
3
4
9
try:

except Exception:

2

đầu ra

try:

except Exception:

3

Bạn có thể bắt gặp nhiều loại ngoại lệ theo cách này, trong đó mệnh đề khác chỉ được thực thi nếu không có ngoại lệ nào xảy ra

try:

except Exception:

4
try:

except Exception:

5

Tăng ngoại lệ

Ngoại lệ được đưa ra khi xảy ra lỗi. Nhưng trong Python, bạn cũng có thể buộc một ngoại lệ xảy ra với từ khóa

try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')
1

Bất kỳ loại ngoại lệ có thể được nâng lên

1
2
3
4
try:

except Exception:

7____68
try:

except Exception:

9

khóa học liên quan. Hoàn thành khóa học & bài tập lập trình Python

Ngoại lệ tích hợp

Danh sách Ngoại lệ tích hợp của Python được hiển thị bên dưới. Danh sách này hiển thị Ngoại lệ và lý do tại sao nó bị ném (nổi lên).

Ngoại lệNguyên nhân của câu lệnh ErrorAssertionErrorif
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')
2 không thành công. AttributeErrorif gán thuộc tính hoặc tham chiếu không thành công. EOFErrorif các hàm
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')
3 chạm vào điều kiện cuối tệp. FloatingPointErrornếu thao tác dấu phẩy động không thành công. GeneratorExitRaise nếu phương thức
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')
4 của trình tạo được gọi. ImportErrornếu không tìm thấy mô-đun đã nhập. IndexErrorif chỉ mục của chuỗi nằm ngoài phạm vi. KeyErrorif không tìm thấy khóa trong từ điển. KeyboardInterruptif người dùng nhấn phím ngắt (Ctrl+c hoặc xóa). MemoryErrornếu một hoạt động hết bộ nhớ. NameErrornếu một biến không được tìm thấy trong phạm vi cục bộ hoặc toàn cầu. NotImplementedErrorbằng các phương pháp trừu tượng. OSErrorif hoạt động của hệ thống gây ra lỗi liên quan đến hệ thống. OverflowErrorif kết quả của một phép toán số học quá lớn để được biểu diễn. ReferenceErrorif một proxy tham chiếu yếu được sử dụng để truy cập một tham chiếu được thu gom rác. RuntimeErrornếu một lỗi không thuộc bất kỳ danh mục nào khác. Hàm StopIterationby
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')
5 để chỉ ra rằng không có mục nào khác được trả về bởi trình vòng lặp. SyntaxErrorby trình phân tích cú pháp nếu gặp phải lỗi cú pháp. IndentationError nếu có thụt lề không chính xác. TabErrorif thụt lề bao gồm các tab và không gian không nhất quán. Trình thông dịch SystemErrorif phát hiện lỗi nội bộ. Chức năng SystemExitby
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')
6. TypeErrornếu một chức năng hoặc hoạt động được áp dụng cho một đối tượng không đúng loại. UnboundLocalErrornếu một tham chiếu được tạo cho một biến cục bộ trong một hàm hoặc phương thức, nhưng không có giá trị nào được liên kết với biến đó. UnicodeErrornếu xảy ra lỗi mã hóa hoặc giải mã liên quan đến Unicode. UnicodeEncodeErrornếu xảy ra lỗi liên quan đến Unicode trong quá trình mã hóa. UnicodeDecodeErrornếu xảy ra lỗi liên quan đến Unicode trong quá trình giải mã. UnicodeTranslateErrornếu xảy ra lỗi liên quan đến Unicode trong quá trình dịch. ValueErrornếu một hàm nhận đối số đúng loại nhưng giá trị không đúng. ZeroDivisionError nếu toán hạng thứ hai của phép chia hoặc phép toán modulo bằng 0. Ngoại lệ do người dùng xác định

Python có nhiều loại ngoại lệ tiêu chuẩn, nhưng chúng có thể không phải lúc nào cũng phục vụ mục đích của bạn.
Chương trình của bạn có thể có loại ngoại lệ của riêng bạn.

Để tạo một ngoại lệ do người dùng định nghĩa, bạn phải tạo một lớp kế thừa từ Ngoại lệ

1
2
3
4
1
2
3
4
5
6
1

Bạn đã tạo một ngoại lệ do người dùng định nghĩa có tên là LunchError trong đoạn mã trên. Bạn có thể tăng ngoại lệ mới này nếu xảy ra lỗi

Xuất ra lỗi tùy chỉnh của bạn

1
2
3
4
5
6
2

Chương trình của bạn có thể có nhiều ngoại lệ do người dùng định nghĩa. Chương trình dưới đây đưa ra các ngoại lệ dựa trên số tiền dự án mới

1
2
3
4
5
6
3
1
2
3
4
5
6
4

Dưới đây là một số chạy mẫu

1
2
3
4
5
6
5

1
2
3
4
5
6
6

Đó là một cách thực hành tốt để đặt tất cả các ngoại lệ do người dùng xác định trong một tệp riêng biệt (các ngoại lệ. py hoặc lỗi. py). Đây cũng là thực tế phổ biến trong các mô-đun tiêu chuẩn

Chúng ta có thể sử dụng cuối cùng với ngoại trừ trong Python không?

Từ khóa finally được sử dụng trong try. ngoại trừ khối . Nó định nghĩa một khối mã để chạy khi thử. ngoại trừ. khối khác là cuối cùng.

Cuối cùng có thể được sử dụng với ngoại trừ?

Người ta có thể sử dụng finally ngay sau lần thử mà không cần sử dụng khối ngoại trừ , nhưng không có ngoại lệ nào được xử lý trong trường hợp đó.

Cuối cùng có thực thi trước ngoại trừ không?

Khối cuối cùng luôn thực thi, bất kể có ném ngoại lệ hay không . Ví dụ mã sau sử dụng khối try/catch để bắt ArgumentOutOfRangeException.

Cuối cùng có chạy theo Ngoại trừ?

Có, khối cuối cùng sẽ được thực thi ngay cả sau câu lệnh return trong một phương thức . Khối cuối cùng sẽ luôn thực thi ngay cả khi có ngoại lệ xảy ra hay không trong Java.