Khối mã finally
cũng là một phần của xử lý ngoại lệ. Khi chúng tôi xử lý ngoại lệ bằng cách sử dụng khối try
và except
, chúng tôi có thể bao gồm khối finally
ở cuối. Khối finally
luôn được thực thi, vì vậy nó thường được sử dụng để thực hiện các tác vụ kết thúc như đóng tài nguyên tệp hoặc đóng kết nối cơ sở dữ liệu hoặc có thể kết thúc quá trình thực thi chương trình bằng một thông báo thú vị
Khối finally
có/không có Xử lý ngoại lệ
Nếu trong mã của bạn, khối except
không thể bắt ngoại lệ và thông báo ngoại lệ được in trên bảng điều khiển, điều này làm gián đoạn quá trình thực thi mã, khối cuối cùng vẫn sẽ được thực thi
Hãy lấy một ví dụ
Hãy thử chạy đoạn mã trên cho hai giá trị khác nhau
Nhập một số giá trị số nguyên làm tử số và cung cấp giá trị 0 cho mẫu số. Sau đây sẽ là đầu ra
Bạn đã chia một số cho 0, điều này không được phép. Thực thi mã Tổng kết. Điều này sẽ được in?
Vì chúng ta đã xử lý lớp ngoại lệ ZeroDivisionError nên đầu tiên, khối
except
được thực thi, sau đó là khốifinally
và sau đó là phần còn lại của mãBây giờ, một số giá trị số nguyên làm tử số và cung cấp một số giá trị chuỗi cho mẫu số. Sau đây sẽ là đầu ra
Thực thi mã Tổng kết. Traceback [cuộc gọi gần đây nhất cuối cùng]. Tập tin "chính. py", dòng 4, inb = int[input["Nhập số mẫu số. "]] Giá trịError. chữ không hợp lệ cho int[] với cơ số 10. 'dsw'
Vì chúng tôi chưa xử lý ngoại lệ ValueError, do đó mã của chúng tôi sẽ ngừng thực thi, ngoại lệ sẽ bị ném, nhưng mã trong khối
finally
vẫn được thực thi
Ngoại lệ trong khối except
Chúng tôi sử dụng khối except
cùng với khối try
để xử lý các ngoại lệ, nhưng điều gì sẽ xảy ra nếu một ngoại lệ xảy ra bên trong khối except
. Chà, khối finally
vẫn sẽ được thực thi
# try block
try:
a = 10
b = 0
print["Result of Division: " + str[a/b]]
# except block handling division by zero
except[ZeroDivisionError]:
print["Result of Division: " + str[a/b]]
finally:
print["Code execution Wrap up!"]
Thực thi mã Tổng kết. Traceback [cuộc gọi gần đây nhất cuối cùng]. Tập tin "chính. py", dòng 4, inprint["Kết quả phép chia. " + str[a/b]] ZeroDivisionError. chia cho 0 Trong quá trình xử lý ngoại lệ trên, một ngoại lệ khác đã xảy ra. Traceback [cuộc gọi gần đây nhất cuối cùng]. Tập tin "chính. py", dòng 7, inprint["Kết quả phép chia. " + str[a/b]] ZeroDivisionError. chia cho số không
Rõ ràng khối finally
là khối đầu tiên được in trên bảng điều khiển, sau đó là thông báo ngoại lệ đầu tiên và sau đó là thông báo ngoại lệ thứ hai
Trong bài học trước của chúng ta về Lỗi và Ngoại lệ trong Python. Bây giờ, chúng ta sẽ khám phá Xử lý ngoại lệ Python
Ở đây, chúng ta sẽ thảo luận về các khối thử/ngoại trừ, khối cuối cùng và khối tăng. Cùng với điều này, chúng ta sẽ tìm hiểu cách xác định ngoại lệ python của riêng bạn
Vì vậy, hãy bắt đầu Xử lý ngoại lệ Python
Xử lý ngoại lệ Python
Xử lý ngoại lệ trong Python là gì?
Như chúng ta đã thấy các loại ngoại lệ khác nhau trong python, chúng ta hãy xem các cách khác nhau để xử lý ngoại lệ Python nếu chúng ta gặp bất kỳ ngoại lệ python nào khi lập trình trong python
Các khối thử/ngoại trừ
Khi bạn nghĩ rằng một phần mã của bạn có thể ném ngoại lệ, hãy đặt nó vào khối thử
Hãy cho chúng tôi xem một ví dụ ngoại lệ thử Python
try: for i in range[3]: print[3/i] except: print["You divided by 0"] print[‘This prints because the exception was handled’]
đầu ra
= BẮT ĐẦU LẠI. C. \Users\lifei\AppData\Local\Programs\Python\Python36-32\try2. py =
Bạn chia cho 0
Bản in này vì ngoại lệ đã được xử lý
Những gì tiếp theo là một khối ngoại trừ. Khi bạn không chỉ định bắt ngoại lệ nào, nó sẽ bắt bất kỳ. Nói cách khác, đây là chung cho các trường hợp ngoại lệ
Khi một ngoại lệ được ném vào một khối thử, trình thông dịch sẽ tìm khối ngoại trừ theo sau nó. Nó sẽ không thực thi phần còn lại của mã trong khối thử
Ngoại lệ Python đặc biệt hữu ích khi mã của bạn lấy đầu vào của người dùng. Bạn không bao giờ biết người dùng sẽ nhập gì và nó sẽ gây rối với mã của bạn như thế nào
1. Nhiều ngoại lệ Python
Có thể có nhiều khối ngoại trừ cho một khối thử. Hãy cho chúng tôi xem các ví dụ xử lý nhiều ngoại lệ của Python
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]
đầu ra
Bạn chia cho 0
Khi trình thông dịch gặp một ngoại lệ, nó sẽ kiểm tra các khối ngoại trừ được liên kết với khối thử đó
Các khối ngoại trừ này có thể khai báo loại ngoại lệ mà chúng xử lý. Khi trình thông dịch tìm thấy một ngoại lệ phù hợp, nó sẽ thực thi khối ngoại trừ đó
Trong ví dụ của chúng tôi, câu lệnh đầu tiên trong khối thử đã cho chúng tôi lỗi ZeroDivisionError
Chúng tôi đã xử lý điều này trong khối except của nó, nhưng các câu lệnh trong lần thử sau khối đầu tiên không thực thi
Điều này là do một khi gặp ngoại lệ, các câu lệnh sau đó trong khối thử sẽ bị bỏ qua
Và nếu không tìm thấy một khối except thích hợp hoặc một khối except chung, thì ngoại lệ sẽ không được xử lý
Trong trường hợp này, phần còn lại của chương trình sẽ không chạy. Nhưng nếu bạn xử lý ngoại lệ, mã sau khối ngoại lệ và khối cuối cùng sẽ chạy như mong đợi
Hãy thử một số mã cho điều này
a,b=1,0 try: print[a/b] except: print["You can't divide by 0"] print["Will this be printed?"]
đầu ra
== KHỞI ĐỘNG LẠI. C. \Users\lifei\AppData\Local\Programs\Python\Python36-32\try. py ==
Bạn không thể chia cho 0
Điều này sẽ được in?
>>>
2. Python Nhiều ngoại lệ trong một Ngoại lệ
Bạn cũng có thể có một khối except xử lý nhiều ngoại lệ. Để làm điều này, sử dụng dấu ngoặc đơn. Không có điều đó, trình thông dịch sẽ trả về lỗi cú pháp
>>> try: print['10'+10] print[1/0] except [TypeError,ZeroDivisionError]: print["Invalid input"]
đầu ra
Đâu vao không hợp lệ
3. Một Generic ngoại trừ Sau tất cả các ngoại lệ
Cuối cùng, bạn có thể khen ngợi tất cả các khối ngoại trừ cụ thể bằng một ngoại trừ chung ở cuối
Khối này sẽ phục vụ để xử lý tất cả các ngoại lệ không bị phát hiện bởi các khối ngoại trừ cụ thể
>>> try: print['1'+1] print[sum] print[1/0] except NameError: print["sum does not exist"] except ZeroDivisionError: print["Cannot divide by 0"] except: print["Something went wrong"]
đầu ra
Đã xảy ra sự cố
Ở đây, câu lệnh đầu tiên trong khối try cố nối một chuỗi thành một int. Điều này làm tăng TypeError
Khi trình thông dịch bắt gặp điều này, nó sẽ kiểm tra một khối except thích hợp để xử lý việc này
Ngoài ra, bạn không thể đặt một câu lệnh giữa các khối try và catch
try: print["1"] print["2"] except: print["3"]
Điều này mang lại cho bạn một lỗi cú pháp
Nhưng chỉ có thể có một khối ngoại trừ chung hoặc mặc định cho một khối thử. Đoạn mã sau cung cấp cho chúng tôi "mặc định" ngoại trừ. ' phải là cuối cùng
________số 8_______Chặn cuối cùng trong Python
Theo tùy chọn, bạn có thể bao gồm một khối ngoại lệ cuối cùng sau khối ngoại trừ cuối cùng. Mã bên dưới khối này thực thi trong mọi trường hợp
>>> try: print[1/0] except ValueError: print["This is a value error"] finally: print["This will print no matter what."]
đầu ra
Điều này sẽ in không có vấn đề gì
Traceback [most recent call last]:File “”, line 2, in
in[1/0]
ZeroDivisionLỗi. chia cho số không
Lưu ý rằng thông báo ngoại lệ Python được in sau khi khối cuối cùng thực thi. Bây giờ bạn có thể nghĩ, tại sao chúng ta không sử dụng câu lệnh in thay thế?
Như bạn có thể thấy trong ví dụ trước, 'cuối cùng' vẫn chạy ngay cả khi chúng ta không bắt được ngoại lệ xảy ra. Bây giờ nếu một ngoại lệ xảy ra trong except thì sao?
>>> try: print[1/0] except ZeroDivisionError: print[2/0] finally: print["Sorry, not happening"]
đầu ra
Xin lỗi, không xảy ra
Traceback [most recent call last]:File “”, line 2, in
in[1/0]
ZeroDivisionLỗi. chia cho số không
Trong quá trình xử lý ngoại lệ trên, một ngoại lệ khác đã xảy ra
đầu ra
Traceback [most recent call last]:File “”, line 4, in
in[2/0]
ZeroDivisionLỗi. chia cho số không
Vì vậy, như bạn có thể thấy, mã bên dưới khối cuối cùng sẽ thực thi bất kể điều gì
Tăng từ khóa trong Python
Đôi khi, bạn có thể muốn giải quyết một tình huống bằng cách đưa ra một ngoại lệ nào đó. Một câu lệnh in đơn giản sẽ không hoạt động ở đây
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]0
đầu ra
Traceback [most recent call last]:File “”, line 1, in
tăng ZeroDivisionError
ZeroDivisionLỗi
Hãy lấy trường hợp phân chia của chúng ta
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]1
đầu ra
10
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]2
đầu ra
Traceback [most recent call last]:File “”, line 2, in
tăng ZeroDivisionError
ZeroDivisionLỗi
Ở đây, chúng tôi chuyển đổi các đầu vào thành a và b thành số nguyên. Sau đó, chúng tôi kiểm tra xem b có bằng 0 không. Trong trường hợp đó, chúng tôi đưa ra lỗi ZeroDivisionError
Bây giờ điều gì sẽ xảy ra nếu chúng ta đặt cái này trong khối try-ngoại trừ? . tập tin py cho nó
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]3
Khi chúng tôi chạy cái này bằng Fn + F5, chúng tôi nhận được đầu ra sau
= BẮT ĐẦU LẠI. C. \Users\lifei\AppData\Local\Programs\Python\Python36-32\try2. py =1
0
Bạn chia cho 0
Điều này sẽ in?
Chúng ta sẽ lấy thêm một ví dụ nữa trước khi tiếp tục
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]4
đầu ra
Traceback [most recent call last]:File “”, line 1, in
tăng KeyError
Lỗi chính
1. Tăng mà không có ngoại lệ được chỉ định trong Python
Có thể sử dụng từ khóa nâng cao mà không chỉ định nâng cao ngoại lệ nào. Sau đó, nó đánh giá lại ngoại lệ đã xảy ra
Đây là lý do tại sao bạn chỉ có thể đặt nó trong một khối ngoại trừ
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]5
đầu ra
Traceback [most recent call last]:File “”, line 2, in
in['1'+1]
LoạiLỗi. phải là str, không phải int
2. Nâng cao với một đối số trong Python
Ngoài ra, bạn có thể cung cấp một đối số cho ngoại lệ được chỉ định trong nâng cao
Bạn có thể làm điều này để đưa ra các chi tiết bổ sung về ngoại lệ
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]6
đầu ra
Traceback [most recent call last]:File “”, line 1, in
tăng ValueError[“Giá trị không phù hợp”]
Giá trịError. Giá trị không phù hợp
Khẳng định trong Python
Một lời khẳng định thực sự là một phép kiểm tra sự tỉnh táo đối với tâm hồn hoài nghi, hoang tưởng của bạn
Nó lấy một biểu thức làm đối số và đưa ra một ngoại lệ python nếu biểu thức có giá trị Boolean Sai
Mặt khác, nó thực hiện Không hoạt động [NOP]
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]7
Bây giờ nếu biểu thức là Sai thì sao?
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]8
đầu ra
Traceback [most recent call last]:File “”, line 1, in
khẳng định [1==0]
Khẳng địnhLỗi
Hãy lấy một ví dụ khác và hãy tạo một. tập tin py cho điều đó
>>> a,b=1,0 >>> try: print[a/b] print["This won't be printed"] print['10'+10] except TypeError: print["You added values of incompatible types"] except ZeroDivisionError: print["You divided by 0"]9
đầu ra
= BẮT ĐẦU LẠI. C. \Users\lifei\AppData\Local\Programs\Python\Python36-32\try2. py =1
2
Xác nhận không thành công
Đồng ý
Traceback [most recent call last]:File “C:\Users\lifei\AppData\Local\Programs\Python\Python36-32\try2.py”, line 5, in
khẳng định 1+2==4
Khẳng địnhLỗi
Thật thú vị, nếu bạn loại bỏ mức tăng từ bên dưới khối ngoại trừ, đây là đầu ra
= BẮT ĐẦU LẠI. C. \Users\lifei\AppData\Local\Programs\Python\Python36-32\try2. py =1
2
Xác nhận không thành công
Đồng ý
Tạm biệt
Điều này là do khi chúng tôi 'nâng cao' một ngoại lệ, chúng tôi không cung cấp xử lý cho nó
Chúng ta có thể sử dụng các xác nhận để kiểm tra đầu vào và đầu ra hợp lệ cho các chức năng
1. Một đối số thứ hai để khẳng định
Bạn có thể tùy chọn cung cấp đối số thứ hai để đưa ra một số thông tin bổ sung về sự cố
a,b=1,0 try: print[a/b] except: print["You can't divide by 0"] print["Will this be printed?"]0
đầu ra
Traceback [most recent call last]:File “”, line 1, in
khẳng định Sai,"Đó là một vấn đề"
Khẳng địnhLỗi. Đó là một vấn đề
Xác định ngoại lệ của riêng bạn trong Python
Cuối cùng, chúng ta sẽ nói về việc tạo ngoại lệ của riêng mình. Đối với điều này, chúng tôi lấy một lớp mới từ lớp Ngoại lệ
Sau đó, chúng tôi gọi nó giống như bất kỳ ngoại lệ nào khác
a,b=1,0 try: print[a/b] except: print["You can't divide by 0"] print["Will this be printed?"]1
đầu ra
Traceback [most recent call last]:File “”, line 1, in
tăng MyError["MyError đã xảy ra"]
Lỗi của tôi. Lỗi của tôi đã xảy ra
Đây là tất cả về Bảng gian lận xử lý ngoại lệ Python
Câu hỏi phỏng vấn Python về Xử lý ngoại lệ
- Xử lý ngoại lệ Python là gì?
- Tại sao xử lý ngoại lệ lại quan trọng trong Python?
- Làm cách nào để xử lý nhiều ngoại lệ trong Python?
- Python xử lý ngoại lệ giá trị như thế nào?
- Mục đích của thử và nắm bắt trong xử lý ngoại lệ Python là gì?
Phần kết luận
Sau bài viết này, chúng tôi hy vọng bạn sẽ chơi an toàn hơn với mã của mình. Điều này là do giờ đây bạn có thể thực hiện Xử lý ngoại lệ Python, nâng cao và thậm chí tạo của riêng bạn