Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Hướng dẫn này giải thích Xử lý ngoại lệ trong Python bằng cách sử dụng khối Thử ngoại trừ với sự trợ giúp của các ví dụ lập trình

Hai loại lỗi có thể khiến chương trình Python dừng đột ngột. e. Lỗi cú pháp và ngoại lệ. Trong hướng dẫn này, chúng ta sẽ thảo luận về loại lỗi thứ hai (Ngoại lệ) trong một số chủ đề quan trọng

Chúng tôi sẽ được hưởng lợi rất nhiều từ việc xử lý các ngoại lệ trong ứng dụng của mình, chẳng hạn như

  • Tạo một ứng dụng mạnh mẽ
  • Tạo mã sạch và không có lỗi

=> Truy cập vào đây để xem loạt bài hướng dẫn đào tạo Python độc quyền

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Bạn sẽ học được gì

  • Python thử ngoại trừ
    • Ngoại lệ là gì
    • Hiểu Truy nguyên
  • Ngoại lệ Python phổ biến
    • #1) Lỗi Loại
    • #2) Lỗi giá trị
    • #3) Lỗi thuộc tính
    • Xử lý ngoại lệ với TryException
    • Xử lý nhiều ngoại lệ với ngoại lệ
      • #1) Xử lý nhiều ngoại lệ với một ngoại lệ
      • #2) Xử lý nhiều ngoại lệ với nhiều ngoại lệ
    • Hãy thử tuyên bố khác
    • Hãy thử tuyên bố cuối cùng
    • Tăng ngoại lệ
    • Các lớp ngoại lệ tùy chỉnh
    • Các câu hỏi thường gặp
  • Sự kết luận
    • đề xuất đọc

Python thử ngoại trừ

Một tin vui là Python có rất nhiều ngoại lệ tích hợp sẵn để bắt lỗi trong mã của chúng ta. Ngoài ra, nó cho chúng tôi cơ hội tạo các ngoại lệ tùy chỉnh khi không có ngoại lệ tích hợp nào phù hợp với nhu cầu của chúng tôi

Ngoại lệ là gì

Vậy ngoại lệ trong Python là gì?

Hãy tạo một mã không hợp lệ và xem trình thông dịch Python sẽ phản hồi như thế nào

Mở trình bao Python và chạy đoạn mã sau

>>> 50/0

Đây là một trong những lỗi phổ biến nhất trong lập trình. Đoạn mã trên cố gắng chia số 50 cho 0 (không). Trình thông dịch Python coi đây là một hoạt động không hợp lệ và phát sinh ZeroDivisionError, làm gián đoạn chương trình và in một dấu vết

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Chúng ta có thể thấy rõ rằng ZeroDivisionError là ngoại lệ đã được nêu ra. Đó thực sự là cách riêng của Python để nói với chúng ta rằng thật không hay khi chia một số cho 0. Mặc dù trong các ngôn ngữ khác như JavaScript, đây không phải là lỗi;

Ngoài ra, điều quan trọng cần biết là đây chỉ là một đối tượng ngoại lệ và Python có sẵn nhiều đối tượng như vậy. Hãy xem tài liệu chính thức của Python này để xem tất cả các Ngoại lệ tích hợp sẵn của Python

Hiểu Truy nguyên

Trước khi chúng tôi xử lý các ngoại lệ, tôi nghĩ sẽ giúp hiểu chính xác điều gì sẽ xảy ra nếu các ngoại lệ không được xử lý và cách Python cố gắng hết sức để thông báo cho chúng tôi về lỗi của chúng tôi

Bất cứ khi nào Python gặp lỗi, nó sẽ đưa ra một ngoại lệ. Nếu ngoại lệ này không được xử lý, thì nó sẽ tạo ra một số thông tin có tên là Traceback. Vì vậy, truy nguyên này chứa thông tin gì?

Nó chứa

  • Thông báo lỗi cho chúng tôi biết ngoại lệ nào đã được đưa ra và điều gì đã xảy ra trước khi ngoại lệ này được đưa ra
  • Các số dòng khác nhau của mã gây ra lỗi này. Một lỗi có thể do một chuỗi lệnh gọi hàm được gọi là ngăn xếp cuộc gọi mà chúng ta sẽ thảo luận sau tại đây gây ra lỗi

Mặc dù hơi khó hiểu nhưng chúng tôi hứa rằng ví dụ tiếp theo sẽ giúp chúng ta hiểu rõ hơn

Nhớ lại truy nguyên được in từ phép chia 50 cho 0 ở trên, chúng ta có thể thấy rằng truy nguyên chứa các thông tin sau

  • File “”: This tells us that this code was run from a console terminal.
  • dòng 1. Điều này cho chúng tôi biết rằng đã xảy ra lỗi trong số dòng này
  • ZeroDivisionLỗi. chia cho số không. Nó cho chúng tôi biết ngoại lệ nào đã được đưa ra và nguyên nhân gây ra nó

Hãy thử một ví dụ khác và có thể xem ngăn xếp cuộc gọi trông như thế nào. Mở trình chỉnh sửa, nhập mã bên dưới và lưu dưới dạng tracebackExp. py

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11

Mở một thiết bị đầu cuối trong thư mục tìm thấy tệp này và chạy

python tracebackExp.py

Bạn sẽ thấy dấu vết sau

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Tracback ở trên có vẻ khó hiểu nhưng thực sự không phải vậy. Pythonistas đã nghĩ ra cách tốt nhất để đọc truy nguyên, đó là từ dưới lên. Vì vậy, hãy sử dụng sự khôn ngoan này để thử và hiểu những gì truy nguyên này cung cấp

  • Ở dưới cùng, chúng tôi nhận được ngoại lệ đã được đưa ra và lý do tại sao nó được đưa ra
  • Di chuyển lên trên ta được tên file là tracebackExp. py nơi xảy ra lỗi này, phép tính gây ra lỗi này compute = tê/div, hàm stack2 và dòng số liên kết 6 nơi phép tính này được thực hiện
  • Di chuyển lên trên, chúng ta thấy rằng hàm stack2 của chúng ta đã được gọi trong hàm stack1 ở dòng số 3
  • Moving to the topmost, we see that the function stack1 was called in line number 11. tells us that it is the file that is being executed.

Ngoại lệ Python phổ biến

Thư viện Python định nghĩa rất nhiều ngoại lệ tích hợp. Bạn có thể kiểm tra Tài liệu Python hoặc gọi hàm local() tích hợp như bên dưới

>>> dir(locals()['__builtins__'])

Chúng tôi sẽ không cố gắng giải quyết tất cả các trường hợp ngoại lệ này, nhưng chúng tôi sẽ xem một số trường hợp ngoại lệ phổ biến mà bạn có thể gặp phải

#1) Lỗi Loại

Nó được nâng lên khi một thao tác hoặc chức năng được áp dụng cho một đối tượng thuộc loại không phù hợp

ví dụ 1

Hãy xem xét chương trình dưới đây. Nó lấy số bị chia và số bị chia, sau đó tính toán và in kết quả của phép chia số bị chia cho số chia

def compute_division():
    dividend = int(input("Enter the dividend: ")) # cast string to int
    divisor = input("Enter the divisor: ") # no casting

    # Compute division
    result = dividend/divisor

    # print result
    print("The result of {}/{} is: {}".format(dividend, divisor, result))

if __name__ == '__main__':
    result = compute_division()

Chúng tôi yêu cầu giá trị của số bị chia và số chia từ người dùng, nhưng chúng tôi quên truyền giá trị chuỗi của số chia thành một số nguyên. Vì vậy, chúng ta kết thúc với kiểu của số bị chia là số nguyên (int) và kiểu của số chia là chuỗi (str). Sau đó, chúng tôi nhận được TypeError vì toán tử chia (/) không hoạt động trên chuỗi

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Bạn có thể quan tâm khi biết rằng không giống như Python, Javascript có Type Coercion về cơ bản chuyển đổi một trong các loại của toán hạng thành một giá trị tương đương của loại toán hạng khác khi các toán hạng thuộc các loại khác nhau

#2) Lỗi giá trị

Điều này xảy ra khi một thao tác hoặc hàm nhận được một đối số có kiểu phù hợp nhưng giá trị không phù hợp

ví dụ 2

Hãy xem xét chương trình của chúng tôi trong Ví dụ 1 ở trên

Nếu người dùng nhập một giá trị chữ và số cho cổ tức như '3a', thì chương trình của chúng tôi sẽ tăng ngoại lệ ValueError. Điều này là do, mặc dù phương thức int() của Python nhận vào bất kỳ số hoặc chuỗi nào và trả về một đối tượng số nguyên, nhưng giá trị chuỗi không được chứa các chữ cái hoặc bất kỳ giá trị không phải là số nào

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

#3) Lỗi thuộc tính

Ngoại lệ này được đưa ra khi gán hoặc tham chiếu một thuộc tính không tồn tại

ví dụ 3

Xét chương trình dưới đây. Nó nhận vào một số và tính căn bậc hai của nó bằng mô-đun toán Python

import math # import math library to gain access to its code

def compute_square_root(number):
    # compute the square root using the math library
    result = math.sqr(number)
    return result

if __name__ == '__main__':
    # get input to compute from user
    number = int(input("Compute Square root of: "))
    # call function to compute square root

Khi người dùng nhập một số, chương trình của chúng tôi sẽ cố gắng sử dụng một hàm từ mô-đun toán học để tính căn bậc hai của nó nhưng ở đây, chúng tôi đã mắc lỗi. Thay vì sqrt, chúng tôi đã gõ nhầm sqr không tồn tại trong mô-đun toán học

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Vì vậy, chúng tôi đã cố gắng tham chiếu một thuộc tính sqr không tồn tại và dẫn đến ngoại lệ AttributeError được nêu ra. Hầu hết chúng ta đều mắc lỗi này rất nhiều. Vì vậy, bạn không đơn độc

Xử lý ngoại lệ với TryException

Là một lập trình viên, một điều mà hầu hết chúng ta sẽ dành thời gian là viết một đoạn mã mạnh mẽ và có khả năng phục hồi. Mã không bị hỏng do một số lỗi. Trong Python, chúng ta có thể đạt được điều này bằng cách đặt các câu lệnh của chúng ta bên trong câu lệnh try–ngoại trừ

Câu lệnh Try-Exception trong Python

Câu lệnh try-ngoại trừ có cấu trúc như sau

try:
    #your code goes here
except """Specify exception type(s) here""":
    #handle exception here

Hãy đính kèm mã trong tracebackExp. py bên trong câu lệnh try-ngoại trừ

def stack1(numb):                     # 1
    div = 0                                                     # 2
    stack2(numb, div)                                # 3

def stack2(numb, div):                            # 5
    try:                                                           # 6
        compute = numb/div                      # 7
        print(compute)                                 # 8
    except ZeroDivisionError as zde:     # 9
        print(zde)                                          # 10
    
if __name__ == '__main__':             # 12  
    numb = 5                                              # 13
    stack1(numb)                                       # 14
    print("program continuous")           # 15

Chạy mã này sẽ tạo ra đầu ra

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Đây là cách câu lệnh try-ngoại trừ hoạt động. Python thực thi mã trong khối thử dòng 7-8. Nếu không tìm thấy mã không hợp lệ, thì mã trong khối ngoại trừ dòng 10 sẽ bị bỏ qua và quá trình thực thi tiếp tục

Tuy nhiên, nếu tìm thấy một mã không hợp lệ, thì việc thực thi sẽ ngay lập tức dừng lại trong khối thử và kiểm tra xem ngoại lệ được đưa ra có khớp với ngoại lệ mà chúng tôi đã cung cấp trong câu lệnh ngoại trừ dòng 9 hay không. Nếu nó phù hợp, thì khối ngoại trừ được thực thi và tiếp tục. Nếu không, chương trình sẽ ngắt

Khối thử thường chứa mã có thể gây ra ngoại lệ trong khi khối ngoại trừ bắt và xử lý ngoại lệ

Xử lý nhiều ngoại lệ với ngoại lệ

Chúng tôi có thể xử lý nhiều ngoại lệ với một “ngoại lệ” hoặc nhiều “ngoại lệ”. Tất cả phụ thuộc vào cách bạn muốn xử lý từng ngoại lệ

#1) Xử lý nhiều ngoại lệ với một ngoại lệ

________số 8

Phương pháp này được sử dụng khi chúng tôi nghi ngờ rằng mã của chúng tôi có thể đưa ra các ngoại lệ khác nhau và chúng tôi muốn thực hiện hành động tương tự trong từng trường hợp. Vì vậy, nếu trình thông dịch Python tìm thấy kết quả khớp, thì mã được viết trong khối ngoại trừ sẽ thực thi

Hãy xem xét mã Python ví dụ bên dưới

def get_fraction(value, idx):

    arr = [4,5,2,0]      # a list of numbers
    idx_value = arr[idx] # if idx is > arr length, IndexError will be raised
    value/idx_value      # if idx_value == 0, ZeroDivisionError will be raised

if __name__ =='__main__':
    # set 'value' and 'idx'
    value = 54
    idx = 3 
    # call function in a try-except statement.
    try:
        result = get_fraction(value, idx)
        print("Fraction is ", result)
    except (IndexError, ZeroDivisionError) as ex:
        print(ex)

Chúng tôi có hai trường hợp ngoại lệ có thể được nêu ra ở đây, ZeroDivisionError và IndexError. Nếu bất kỳ ngoại lệ nào trong số này được đưa ra, thì khối ngoại trừ sẽ được thực thi

Trong đoạn mã trên, idx=3, vì vậy idx_value trở thành 0 và value/idx_value sẽ tăng ZeroDivisionError

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

#2) Xử lý nhiều ngoại lệ với nhiều ngoại lệ

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
0

Nếu chúng tôi muốn xử lý từng ngoại lệ riêng biệt, thì đây là cách bạn có thể thực hiện

Hãy xem xét mã Python ví dụ bên dưới

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
1

Chúng tôi nhận thấy ở đây rằng Exception đã được sử dụng trong câu lệnh except cuối cùng. Điều này là do đối tượng ngoại lệ Exception khớp với bất kỳ ngoại lệ nào. Vì lý do này, nó phải luôn ở cuối cùng, vì Python sẽ ngừng kiểm tra các trình xử lý ngoại lệ khác khi một trình xử lý phù hợp

Trong đoạn mã trên, idx=5, do đó mảng[idx] sẽ tăng IndexError vì idx lớn hơn độ dài của mảng danh sách

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Ngoài ra, không chắc chắn ngoại lệ nào được đưa ra bởi ứng dụng của bạn không bao giờ an toàn để tiếp tục thực thi. Đó là lý do tại sao chúng tôi có loại Ngoại lệ để bắt bất kỳ ngoại lệ không được dự đoán nào. Sau đó, chúng tôi thông báo cho người dùng và làm gián đoạn ứng dụng bằng cách đưa ra ngoại lệ tương tự

Hãy thử tuyên bố khác

Đây là một tính năng tùy chọn của xử lý ngoại lệ và cho phép bạn thêm mã mà bạn muốn chạy khi không có lỗi xảy ra. Nếu xảy ra lỗi, khối khác này sẽ không chạy

Xem xét ví dụ về mã Python bên dưới, mở trình chỉnh sửa của bạn và lưu mã dưới dạng otherTry. py

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
2

Chúng tôi nhận đầu vào từ người dùng và sử dụng nó để chia 1. Chúng tôi có hai trường hợp ngoại lệ có thể xảy ra ở đây, đầu vào của người dùng không hợp lệ sẽ gây ra ValueError và số không (0) sẽ gây ra ZeroDivisionError. Tuyên bố ngoại trừ của chúng tôi xử lý các lỗi này

Bây giờ, chúng tôi muốn in ra giá trị của giá trị. Khối khác của chúng tôi đảm bảo rằng nó chỉ được in nếu khối thử của chúng tôi thực thi mà không có lỗi. Điều này rất quan trọng vì nếu xảy ra lỗi trong khối thử của chúng tôi, giá trị sẽ không được xác định. Vì vậy, truy cập nó sẽ phát sinh một lỗi khác

Chạy đoạn mã trên với Python otherThử. py

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Đầu ra ở trên cho thấy rằng đối với đầu vào đầu tiên, chúng tôi đã nhập 0 và nhấn ENTER. Vì số chia của chúng tôi nhận được 0, 1/số chia tăng lên zeroDivisionError. Đầu vào thứ hai của chúng tôi là k không hợp lệ cho int(), do đó, ValueError ngoại lệ được đưa ra

Nhưng đầu vào cuối cùng của chúng tôi là 9 hợp lệ và kết quả là chúng tôi nhận được giá trị của "giá trị" được in là 0. 1111111111111111

Hãy thử tuyên bố cuối cùng

Đây cũng là một tính năng tùy chọn của xử lý ngoại lệ và sẽ luôn chạy bất kể điều gì xảy ra trong trình xử lý ngoại lệ

Đó là

  • Có hay không một ngoại lệ xảy ra
  • Ngay cả khi 'return' được gọi trong các khối khác
  • Ngay cả khi tập lệnh bị thoát trong các khối khác

Vì vậy, nếu chúng tôi có một mã mà chúng tôi muốn chạy trong mọi tình huống, khối cuối cùng là người của chúng tôi. Khối này chủ yếu được sử dụng để dọn dẹp như đóng tệp

Hãy xem xét mã Python ví dụ bên dưới

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
3

Mã này cố mở và đọc văn bản tệp. txt trong thư mục hiện tại của nó. Nếu tệp tồn tại, thì chương trình của chúng tôi sẽ in dòng đầu tiên của tệp, sau đó khối cuối cùng của chúng tôi sẽ chạy và đóng tệp

Giả sử chúng tôi có một tệp có tên là văn bản. txt trong thư mục chứa tệp chương trình này và chứa Hello. Nếu chúng ta chạy chương trình, chúng ta sẽ có đầu ra

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Ví dụ này được chọn có chủ ý vì tôi muốn chúng tôi giải quyết một vấn đề nhỏ có thể xảy ra khi đóng tệp trong khối cuối cùng

Nếu tệp không tồn tại, ngoại lệ FileNotFoundError sẽ được đưa ra và biến openFile sẽ không được xác định và sẽ không phải là đối tượng tệp. Do đó, cố gắng đóng nó trong khối cuối cùng sẽ tạo ra một ngoại lệ UnboundLocalError, một lớp con của NameError

Về cơ bản, điều này nói rằng chúng ta đang cố gắng tham chiếu biến openFile trước khi nó được gán

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Một mẹo nhỏ ở đây là sử dụng các trình xử lý ngoại lệ bên trong khối cuối cùng

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
4

Nếu khối thử của chúng tôi tăng FileNotFoundError, thì chúng tôi sẽ có đầu ra sau

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Tăng ngoại lệ

Một tin tốt về các ngoại lệ Python là chúng ta có thể cố ý nâng cao chúng. Các ngoại lệ được nêu ra với câu lệnh nâng cao

Câu lệnh raise có cú pháp như sau

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
5

Mở một thiết bị đầu cuối và nâng cao bất kỳ đối tượng ngoại lệ nào từ Ngoại lệ dựng sẵn của Python. Ví dụ: nếu chúng tôi tăng ZeroDivisionError.

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
6

Chúng ta sẽ lấy lại dấu vết

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Vì vậy, tại sao điều quan trọng là tăng ngoại lệ?

  • Khi làm việc với các ngoại lệ tùy chỉnh
  • Trong quá trình kiểm tra vệ sinh

Các lớp ngoại lệ tùy chỉnh

Một ngoại lệ tùy chỉnh là một ngoại lệ mà bạn tạo để xử lý các lỗi dành riêng cho nhu cầu của bạn. Bí quyết là, chúng ta định nghĩa một lớp bắt nguồn từ đối tượng Exception, sau đó chúng ta sử dụng câu lệnh nâng cao để nâng cao lớp ngoại lệ của mình

Giả sử chúng tôi muốn kiểm tra đầu vào của người dùng và đảm bảo giá trị đầu vào không âm (kiểm tra độ chính xác). Tất nhiên, chúng tôi có thể tăng ngoại lệ ValueError của Python nhưng chúng tôi sẽ muốn tùy chỉnh lỗi bằng cách đặt cho nó một tên cụ thể và dễ hiểu như InputIsNegativeError. Nhưng ngoại lệ này không phải là Ngoại lệ dựng sẵn của Python

Vì vậy, trước tiên, chúng tôi tạo lớp cơ sở sẽ xuất phát từ Ngoại lệ

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
7

Sau đó, chúng tôi tạo lớp ngoại lệ sẽ kế thừa lớp cơ sở và sẽ xử lý lỗi cụ thể của chúng tôi

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
8

Hãy kiểm tra điều này

def stack1(numb):      # 1
    div = 0                                      # 2
    stack2(numb, div)                 # 3

def stack2(numb, div):             # 5
    compute = numb/div           # 6
    print(compute)                     # 7 
    
if __name__ == '__main__': # 9
    numb = 5                                  # 10
    stack1(numb)                          # 11
9

Yêu cầu mã trên cho đầu vào của người dùng và kiểm tra xem nó có âm không. Nếu đúng, nó sẽ làm tăng ngoại lệ tùy chỉnh InputIsNegativeError của chúng tôi, lỗi này sau đó sẽ bị bắt trong câu lệnh ngoại trừ

Dưới đây là mã hoàn chỉnh

python tracebackExp.py
0

Nếu giá trị đầu vào là một số âm như -1, thì chúng ta sẽ có đầu ra

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ trong python không?

Hãy xem tài liệu Python để biết thêm chi tiết về các ngoại lệ tùy chỉnh của Python

Các câu hỏi thường gặp

Câu hỏi 1) Python xử lý ngoại lệ như thế nào?

Câu trả lời. Python xử lý các ngoại lệ bằng câu lệnh try-ngoại trừ. Mã có thể đưa ra một ngoại lệ được đặt và thực thi trong khối thử trong khi khối ngoại trừ giữ mã sẽ xử lý các ngoại lệ nếu có phát sinh

Q #2) Điều gì đang gây ra một ngoại lệ trong Python?

Câu trả lời. Bất cứ khi nào trình thông dịch Python gặp mã không hợp lệ, nó sẽ đưa ra một ngoại lệ, đó là cách riêng của Python để cho chúng ta biết rằng có điều gì đó không mong muốn đã xảy ra. Chúng ta cũng có thể cố tình đưa ra các ngoại lệ bằng cách sử dụng câu lệnh nâng cao

Q #3) Python xử lý nhiều ngoại lệ như thế nào?

Câu trả lời. Python xử lý nhiều ngoại lệ bằng cách sử dụng một khối ngoại trừ hoặc nhiều khối ngoại trừ

Đối với một khối duy nhất, các ngoại lệ được chuyển thành một bộ. ngoại trừ (Ngoại lệ1, Ngoại lệ2,. ,ExceptionN) và Python kiểm tra sự trùng khớp từ phải sang trái. Trong trường hợp này, hành động tương tự được thực hiện cho từng ngoại lệ

Một cách khác để nắm bắt tất cả các ngoại lệ là bỏ tên của ngoại lệ sau từ khóa except

python tracebackExp.py
1

Cách thứ hai là sử dụng một khối ngoại trừ cho mỗi ngoại lệ

python tracebackExp.py
2

Bằng cách này, bạn có thể thực hiện các hành động riêng biệt cho từng Ngoại lệ

Q #4) Tại sao việc xử lý Ngoại lệ lại quan trọng trong Python?

Câu trả lời. Lợi ích của việc xử lý ngoại lệ trong Python là chúng ta có thể tạo các ứng dụng mạnh mẽ, sạch sẽ và không có lỗi. Chúng tôi không muốn mã sản xuất của mình gặp sự cố do một số lỗi, vì vậy chúng tôi xử lý lỗi và duy trì hoạt động của ứng dụng

Q #5) Làm thế nào để bạn bỏ qua một ngoại lệ trong Python?

Câu trả lời. Để bỏ qua một ngoại lệ trong Python, hãy sử dụng từ khóa pass trong khối ngoại trừ. Giả sử chúng ta muốn bỏ qua ngoại lệ ValueError. Chúng tôi sẽ làm theo cách này

python tracebackExp.py
3

Trừ khi bạn biết mình đang làm gì, nếu không thì việc bỏ qua các ngoại lệ là một cách làm không tốt. Ít nhất, thông báo cho người dùng về tất cả các lỗi tiềm ẩn

Sự kết luận

Trong hướng dẫn này, chúng tôi đã đề cập. Ngoại lệ Python, Traceback;

Bạn có thể kiểm tra nhiều lỗi trong một dòng ngoại trừ không?

Có, có thể kiểm tra nhiều loại lỗi chỉ bằng một câu lệnh thử và ngoại trừ . Đối với except , chúng ta có thể bao gồm nhiều loại lỗi được liệt kê trong một tuple. Nó sẽ kiểm tra xem có bất kỳ lỗi nào được liệt kê không.

Bạn có thể có hai câu lệnh except trong Python không?

🔹 Nhiều mệnh đề trừ . Nhiều nhất một trình xử lý sẽ được thực thi. Trong ví dụ này, chúng tôi có hai mệnh đề ngoại trừ. A try statement may have more than one except clause, to specify handlers for different exceptions. At most one handler will be executed. In this example, we have two except clauses.

Một khối có thể xử lý nhiều ngoại lệ không?

Trong Java 7, khối catch đã được cải thiện để xử lý nhiều ngoại lệ trong một khối catch duy nhất . Nếu bạn đang bắt nhiều ngoại lệ và chúng có mã giống nhau, thì việc sử dụng tính năng này sẽ giảm trùng lặp mã.

Có bao nhiêu loại lỗi Xử lý ngoại lệ trong Python là gì?

Có hai loại lỗi chủ yếu trong lập trình python là - Lỗi cú pháp và Lỗi logic hoặc Ngoại lệ . Bất cứ khi nào chúng ta không viết đúng cú pháp của ngôn ngữ lập trình python (hoặc bất kỳ ngôn ngữ nào khác) thì trình thông dịch python sẽ đưa ra một lỗi được gọi là lỗi cú pháp.