Saat kita meneruskan angka negatif ke fungsi is_prime, angka negatif itu akan diteruskan ke fungsi >>> 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, yang memunculkan pengecualian >>> 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
Fungsi >>> 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 dalam modul >>> 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 Python memunculkan pengecualian ketika diberi angka negatif
Mungkin ada beberapa kasus di mana is_prime harus mengajukan pengecualian tetapi tidak sekarang. Misalnya, jika kita melewatkan angka floating point ke fungsi is_prime, fungsi tersebut akan mengembalikan jawaban
Dan terkadang itu mengembalikan jawaban yang sangat aneh
Tidak masuk akal untuk menanyakan non-bilangan bulat apakah itu bilangan prima, jadi fungsi is_prime kita mungkin harus memunculkan pengecualian saat diberi nomor floating point
Juga, jika kita meneruskan >>> 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 atau >>> 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 ke is_prime, itu mengembalikan if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 0
Itu mungkin harus mengembalikan if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") _1 atau memunculkan pengecualian sebagai gantinya (tergantung pada bagaimana kami lebih suka menerapkan is_prime)
Memunculkan pengecualian saat kondisi tertentu terpenuhi
Kita dapat memodifikasi fungsi is_prime kita untuk memeriksa kedua kondisi ini, memunculkan pengecualian jika salah satu dari kondisi tersebut terpenuhi
Pertama kita akan bertanya apakah nomor yang diberikan adalah turunan dari kelas if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 4, dan kita akan memunculkan pengecualian if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 5 jika itu adalah
if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}")
Kami menggunakan pernyataan if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") _6 Python dan mengirimkan objek pengecualian if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 5. Kami menggunakan if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") _5 karena jenis yang diberikan salah
Selain itu, jika angka yang diberikan kurang dari if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 9, kami akan mengatakan bahwa ini bukan nilai yang valid, jadi kami akan menaikkan pengecualian >>> 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. Pesan untuk pengecualian >>> 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 kami akan menyatakan bahwa hanya bilangan bulat di atas >>> 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 yang diterima
if number < 2: raise ValueError(f"Only integers above 1 are accepted: {number}")
Inilah fungsi is_prime_ yang diperbarui dengan kedua kondisi tersebut dan pernyataan 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
Dalam kedua kasus ini, pesan kesalahan yang kami berikan ke objek pengecualian kami menunjukkan nomor yang kami berikan, yang akan membuat pesan kesalahan kami sangat membantu saat kami sedang men-debug kode kami
Wow ketika kita memanggil fungsi is_prime_ dengan angka floating point, itu menimbulkan pengecualian if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 5 yang mengatakan hanya bilangan bulat yang diterima
>>> 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
Demikian pula, jika kita memanggil is_prime dengan >>> 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 atau >>> 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, itu memunculkan pengecualian >>> 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
Dalam kedua kasus, traceback yang dicetak Python menunjukkan pesan kesalahan ramah yang kami berikan pada objek pengecualian kami
Python memiliki pengecualian bawaan
Dari mana if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 5 dan >>> 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 berasal?
Jika Anda melihat bantuan pada modul 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 di Python, atau jika Anda melihat , Anda akan melihat hierarki pengecualian
>>> 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 dan >>> 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 hanyalah dua dari banyak pengecualian bawaan di Python. Ada lusinan pengecualian yang dibangun ke dalam Python. Kami tidak perlu mengimpor apa pun untuk menggunakan pengecualian ini;
Kita dapat menentukan jenis pengecualian khusus kita sendiri dengan mewarisi dari kelas pengecualian lain, tetapi agak tidak biasa untuk melakukannya. Kecuali jika Anda benar-benar perlu membedakan pengecualian Anda dari pengecualian yang dibangun ke dalam Python, Anda mungkin tidak akan sering membuat pengecualian khusus
Jenis pengecualian paling umum yang saya ajukan dalam kode saya adalah pengecualian >>> 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
Gunakan if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") _6 untuk melempar pengecualian dengan Python
Jika Anda memiliki kondisi tertentu dalam fungsi Anda yang seharusnya membuat program Anda mogok dengan keras (jika/ketika kondisi itu terpenuhi), Anda dapat mengajukan pengecualian dengan menggunakan pernyataan if isinstance(number, float): raise TypeError(f"Only integers are accepted: {number}") 6 dan memberikan objek pengecualian untuk dimunculkan