Chúng ta có thể sử dụng cuối cùng với ngoại trừ trong Python không?
Khối mã Show
Khối finally có/không có Xử lý ngoại lệNếu trong mã của bạn, khối 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
Ngoại lệ trong khối exceptChúng tôi sử dụng khối
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 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ệ PythonCó 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 == >>> 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 PythonTheo 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ì 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 “ 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 “ 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 “ 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 “ 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 “ tăng KeyError Lỗi chính 1. Tăng mà không có ngoại lệ được chỉ định trong PythonCó 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 “ 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 PythonNgoà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 “ tăng ValueError(“Giá trị không phù hợp”) Giá trịError. Giá trị không phù hợp Khẳng định trong PythonMộ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 “ 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 địnhBạ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 “ 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 PythonCuố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 “ 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ệ
Phần kết luậnSau 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 Không thể sử dụng khối nào với khối cuối cùng trong Python?Bạn chỉ có thể sử dụng cuối cùng kết hợp với khối thử
Chúng tôi có thể xử lý ngoại lệ trong khối cuối cùng không?Khối cuối cùng sẽ thực thi cho dù có tăng ngoại lệ hay không và liệu ngoại lệ có được xử lý hay không . A cuối cùng chứa tất cả các câu lệnh quan trọng bất kể ngoại lệ có xảy ra hay không. Trong trường hợp này, chương trình chạy tốt mà không ném bất kỳ ngoại lệ nào và cuối cùng khối thực thi sau khối thử.
Chúng tôi có thể sử dụng cuối cùng mà không cần thử ngoại trừ trong Python không?Không thể thực hiện cả hai .
Cuối cùng có chạy theo Ngoại trừ?Khối cuối cùng luôn thực thi, bất kể có ném ngoại lệ hay không . |