Làm thế nào để bạn tăng ngoại lệ trong ngoại trừ python?

Khi chúng ta chuyển một số âm cho hàm is_prime, nó sẽ chuyển số âm đó vào hàm

>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
0, điều này làm phát sinh một ngoại lệ
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
1

>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error

Hàm

>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
2 trong mô-đun
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
3 của Python đưa ra một ngoại lệ khi nó được cung cấp một số âm

Có thể có một số trường hợp mà is_prime nên đưa ra một ngoại lệ nhưng không phải lúc này. Ví dụ: nếu chúng ta chuyển một số dấu phẩy động cho hàm is_prime, nó sẽ trả về một câu trả lời

Và đôi khi nó trả về một câu trả lời thực sự kỳ lạ

Sẽ không hợp lý khi hỏi một số không phải là số nguyên liệu nó có phải là số nguyên tố hay không, vì vậy hàm is_prime của chúng ta có thể sẽ đưa ra một ngoại lệ khi được cung cấp một số dấu phẩy động

Ngoài ra, nếu chúng tôi chuyển vào

>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
7 hoặc
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
8 đến is_prime, nó sẽ trả về
    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
0

Thay vào đó, nó có thể nên trả về

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
1 hoặc đưa ra một ngoại lệ (tùy thuộc vào cách chúng tôi muốn triển khai is_prime)

Đưa ra một ngoại lệ khi một điều kiện cụ thể được đáp ứng

Chúng ta có thể sửa đổi hàm is_prime của mình để kiểm tra hai điều kiện này, đưa ra một ngoại lệ nếu một trong hai điều kiện đó được đáp ứng

Trước tiên, chúng tôi sẽ hỏi liệu số đã cho có phải là một thể hiện của lớp

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
4 hay không và chúng tôi sẽ đưa ra một ngoại lệ
    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
5 nếu đó là

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")

Chúng tôi đang sử dụng câu lệnh

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
6 của Python và chuyển vào một đối tượng ngoại lệ
    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
5. Chúng tôi đang sử dụng
    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
5 vì loại sai đã được cung cấp

Ngoài ra, nếu số đã cho nhỏ hơn

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
9, chúng tôi sẽ nói rằng đây không phải là giá trị hợp lệ, vì vậy chúng tôi sẽ đưa ra một ngoại lệ
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
1. Thông báo cho ngoại lệ
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
1 của chúng tôi sẽ tuyên bố rằng chỉ những số nguyên trên
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
8 mới được chấp nhận

    if number < 2:
        raise ValueError(f"Only integers above 1 are accepted: {number}")

Đây là hàm is_prime được cập nhật với cả hai điều kiện đó và câu lệnh

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
6

def is_prime(number):
    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
    if number < 2:
        raise ValueError(f"Only integers above 1 are accepted: {number}")
    for candidate in range(2, int(sqrt(number))+1):
        if number % candidate == 0:
            return False
    return True

Trong cả hai trường hợp này, thông báo lỗi chúng tôi cung cấp cho đối tượng ngoại lệ của mình hiển thị số chúng tôi đã cung cấp, điều này sẽ làm cho thông báo lỗi của chúng tôi hữu ích nhất có thể khi chúng tôi gỡ lỗi mã của mình

Ồ, khi chúng ta gọi hàm is_prime với một số dấu phẩy động, nó sẽ tạo ra một ngoại lệ

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
5 cho biết chỉ các số nguyên mới được chấp nhận

>>> is_prime(4.5)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime2.py", line 6, in is_prime
    raise TypeError(f"Only integers are accepted: {number}")
TypeError: Only integers are accepted: 4.5

Tương tự, nếu chúng ta gọi is_prime với

>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
8 hoặc
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
7, nó sẽ tạo ra một ngoại lệ
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
1

>>> is_prime(1)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime2.py", line 8, in is_prime
    raise ValueError(f"Only integers above 1 are accepted: {number}")
ValueError: Only integers above 1 are accepted: 1

Trong cả hai trường hợp, dấu vết mà Python in ra hiển thị thông báo lỗi thân thiện mà chúng tôi đã cung cấp cho các đối tượng ngoại lệ của mình

Python có các ngoại lệ tích hợp

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
5 và
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
1 đến từ đâu?

Nếu bạn xem phần trợ giúp trên mô-đun

def is_prime(number):
    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
    if number < 2:
        raise ValueError(f"Only integers above 1 are accepted: {number}")
    for candidate in range(2, int(sqrt(number))+1):
        if number % candidate == 0:
            return False
    return True
3 trong Python hoặc nếu bạn xem phần , bạn sẽ thấy hệ thống phân cấp ngoại lệ

>>> import builtins
>>> help(builtins)
Help on built-in module builtins:

NAME
    builtins - Built-in functions, exceptions, and other objects.

DESCRIPTION
    Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.

CLASSES
    object
        BaseException
            Exception
                ArithmeticError
                    FloatingPointError
                    OverflowError
                    ZeroDivisionError
                AssertionError
                AttributeError
                BufferError
                EOFError
                ImportError
                    ModuleNotFoundError
                LookupError
                    IndexError
                    KeyError
                MemoryError
                NameError
                    UnboundLocalError
                OSError
                    BlockingIOError
                    ChildProcessError
                    ConnectionError
                        BrokenPipeError
                        ConnectionAbortedError
                        ConnectionRefusedError
                        ConnectionResetError
                    FileExistsError
                    FileNotFoundError
                    InterruptedError
                    IsADirectoryError
                    NotADirectoryError
                    PermissionError
                    ProcessLookupError
                    TimeoutError
                ReferenceError
                RuntimeError
                    NotImplementedError
                    RecursionError
                StopAsyncIteration
                StopIteration
                SyntaxError
                    IndentationError
                        TabError
                SystemError
                TypeError
                ValueError
                    UnicodeError
                        UnicodeDecodeError
                        UnicodeEncodeError
                        UnicodeTranslateError
                Warning
                    BytesWarning
                    DeprecationWarning
                    EncodingWarning
                    FutureWarning
                    ImportWarning
                    PendingDeprecationWarning
                    ResourceWarning
                    RuntimeWarning
                    SyntaxWarning
                    UnicodeWarning
                    UserWarning
            GeneratorExit
            KeyboardInterrupt
            SystemExit

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
5 và
>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
1 chỉ là hai trong số nhiều ngoại lệ được tích hợp sẵn trong Python. Có hàng tá ngoại lệ được tích hợp trong Python. Chúng tôi không phải nhập bất cứ thứ gì để sử dụng các ngoại lệ này;

Chúng tôi có thể xác định các loại ngoại lệ tùy chỉnh của riêng mình bằng cách kế thừa từ một lớp ngoại lệ khác, nhưng hơi bất thường khi làm như vậy. Trừ khi bạn thực sự cần phân biệt các ngoại lệ của mình với các ngoại lệ được tích hợp sẵn trong Python, có thể bạn sẽ không thường xuyên tạo các ngoại lệ tùy chỉnh

Loại ngoại lệ phổ biến nhất mà tôi đưa ra trong mã của mình là ngoại lệ

>>> is_prime(-2)
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/trey/is_prime.py", line 5, in is_prime
    for candidate in range(2, int(sqrt(number))+1):
ValueError: math domain error
1

Sử dụng if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 6 để ném ngoại lệ trong Python

Nếu bạn có một điều kiện cụ thể trong chức năng của mình, điều này sẽ làm hỏng chương trình của bạn (nếu/khi điều kiện đó được đáp ứng), bạn có thể đưa ra một ngoại lệ bằng cách sử dụng câu lệnh

    if isinstance(number, float):
        raise TypeError(f"Only integers are accepted: {number}")
6 và cung cấp một đối tượng ngoại lệ để đưa ra

Các ngoại lệ có được đưa ra hoặc ném vào Python không?

Khi Python gặp lỗi, nó sẽ đưa ra một ngoại lệ . Nếu không bắt được đối tượng ngoại lệ, chương trình sẽ kết thúc bằng truy xuất ngược (thông báo lỗi).

Làm cách nào để câu lệnh try except xử lý lỗi trong Python?

Câu lệnh Try-Except là một khối mã cho phép chương trình của bạn thực hiện các hành động thay thế trong trường hợp xảy ra lỗi . Trước tiên, Python sẽ cố gắng thực thi mã trong câu lệnh thử (khối mã 1). Nếu không có ngoại lệ nào xảy ra, câu lệnh except bị bỏ qua và quá trình thực hiện câu lệnh try kết thúc.