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ố âmCó 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}"]
0Thay 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ấpNgoà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}"]
6def 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
1Sử dụng if isinstance[number, float]:
raise TypeError[f"Only integers are accepted: {number}"]
6 để ném ngoại lệ trong Python
if isinstance[number, float]:
raise TypeError[f"Only integers are accepted: {number}"]
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