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

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 tryexcept, 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

  1. 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ối finally và sau đó là phần còn lại của mã

  2. 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

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

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ệ

  1. Xử lý ngoại lệ Python là gì?
  2. Tại sao xử lý ngoại lệ lại quan trọng trong Python?
  3. Làm cách nào để xử lý nhiều ngoại lệ trong Python?
  4. Python xử lý ngoại lệ giá trị như thế nào?
  5. 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

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 .