Python - Pengecualian Dalam-Buat
Helo, pemrogram yang beraspirasi! Hari ini, kita akan menyelam ke atas dunia yang menarik tentang pengecualian dalam-buat Python. Jangan khawatir jika anda baru untuk pemrograman; saya akan pandu anda melalui topik ini langkah demi langkah, sama seperti yang saya lakukan untuk pelbagai pelajar selama tahun penyediaan saya. Mari kita melakukan perjalanan yang menarik ini bersama-sama!
Pengecualian Dalam-Buat Standard di Python
Bayangkan anda sedang memasak di atas dapur, dan tiba-tiba anda menyadari anda kehabisan bahan penyusun penting. Itulah yang serupa dengan apa yang terjadi di atas pemrograman apabila pengecualian terjadi - sesuatu yang tidak dijangka yang mengganggu aliran normal kod anda. Python memiliki pelbagai jenis pengecualian dalam-buat untuk menguruskan jenis-jenis ralat yang berbeza.
Mari kita lihat beberapa pengecualian dalam-buat yang paling umum:
- SyntaxError: Ini adalah seperti lupa untuk meletakkan titik di atas ayat. Python naikkan ini apabila menghadapi sintaks yang salah.
print "Helo, World!" # SyntaxError: Missing parentheses in call to 'print'
Dalam contoh ini, kita lupa untuk menambahkan kurungan di atas rentetan di atas fungsi print, yang diperlukan di atas Python 3.
- NameError: Ini terjadi apabila anda cuba untuk menggunakan pembolehubah yang belum ditakrifkan lagi.
print(x) # NameError: name 'x' is not defined
Di sini, kita sedang mencuba untuk mencetak pembolehubah 'x' yang kita belum membuat atau menetapkan nilai kepada.
- TypeError: Ini terjadi apabila operasi dilakukan di atas jenis yang tidak sesuai.
"2" + 2 # TypeError: can only concatenate str (not "int") to str
Dalam kes ini, kita sedang mencuba untuk menambah rentetan ("2") kepada integer (2), yang Python tidak tahu bagaimana untuk lakukan.
- ValueError: Ini diangkat apabila fungsi menerima hujah dengan jenis yang betul tetapi nilai yang tidak sesuai.
int("hello") # ValueError: invalid literal for int() with base 10: 'hello'
Fungsi int() mengharapkan rentetan yang mewakili nombor, bukan kata.
- ZeroDivisionError: Ini terjadi apabila anda cuba untuk membagi dengan nol.
10 / 0 # ZeroDivisionError: division by zero
Seperti di atas matematik, pembagian dengan nol adalah tidak ditakrifkan di atas pemrograman.
Hierarchy of Built-in Exceptions
Pengecualian dalam-buat Python diuruskan dalam hirarki, seperti pohon keluarga. Di atas puncak pohon ini adalah kelas BaseException, dari mana semua pengecualian lain warisi.
Ini adalah versi penyederhanaan hirarki pengecualian:
Hierarchy Pengecualian |
---|
BaseException |
├── SystemExit |
├── KeyboardInterrupt |
├── GeneratorExit |
└── Exception |
├── StopIteration |
├── ArithmeticError |
│ ├── FloatingPointError |
│ ├── OverflowError |
│ └── ZeroDivisionError |
├── AssertionError |
├── AttributeError |
├── BufferError |
├── EOFError |
├── ImportError |
│ └── ModuleNotFoundError |
├── LookupError |
│ ├── IndexError |
│ └── KeyError |
├── MemoryError |
├── NameError |
│ └── UnboundLocalError |
├── OSError |
│ ├── FileExistsError |
│ ├── FileNotFoundError |
│ ├── PermissionError |
│ └── TimeoutError |
├── ReferenceError |
├── RuntimeError |
│ └── NotImplementedError |
├── SyntaxError |
│ └── IndentationError |
│ └── TabError |
├── SystemError |
├── TypeError |
├── ValueError |
│ └── UnicodeError |
└── Warning |
Mengerti hirarki ini boleh membantu anda untuk tangkap dan uruskan pengecualian lebih effectively di atas kod anda.
Cara Menggunakan Pengecualian Dalam-Buat
Sekarang kita tahu apa itu pengecualian, mari kita belajar cara menggunakannya di atas kod kita. Cara utama untuk menguruskan pengecualian adalah dengan menggunakan blok try-except. Itu adalah seperti memiliki rakit penyelamat apabila anda belajar untuk naik rakit - jika anda jatuh (menghadapi pengecualian), rakit (blok except) menangkap anda.
Ini adalah struktur asas:
try:
# Kod yang mungkin naikkan pengecualian
result = 10 / 0
except ZeroDivisionError:
# Kod untuk menguruskan pengecualian khusus
print("Oops! Anda tak boleh bagi dengan nol.")
Dalam contoh ini, kita sedang mencuba untuk bagi dengan nol, yang kita tahu akan naikkan ZeroDivisionError. Blok except menangkap ralat khusus ini dan cetak mesej yang mesra sebaliknya daripada kena karamkan program.
Anda juga boleh tangkap pengecualian berbilang:
try:
# Kod yang mungkin naikkan pengecualian berbeza
number = int(input("Masukkan nombor: "))
result = 10 / number
except ValueError:
print("Itu bukan nombor yang sah!")
except ZeroDivisionError:
print("Anda tak boleh bagi dengan nol!")
except:
print("Ada yang lain yang salah.")
Skrip ini menguruskan skenario yang berbeza: jika pengguna masukkan nilai bukan numerik (ValueError), mencuba untuk bagi dengan nol (ZeroDivisionError), atau jika ralat yang tidak dijangka lain terjadi.
Mengangkat Pengecualian Dalam-Buat Secara-explicit
Ada masa di mana anda mungkin mahu mengangkat pengecualian sendiri. Itu adalah seperti menjadi wasit di atas permainan - apabila anda lihat sesuatu yang tidak betul, anda bunyikan rakit dan henti permainan.
Ini cara anda boleh mengangkat pengecualian:
def check_age(age):
if age < 0:
raise ValueError("Umur tak boleh negatif!")
elif age < 18:
print("Anda masih di bawah umur.")
else:
print("Anda adalah dewasa.")
try:
check_age(-5)
except ValueError as e:
print(e)
Dalam contoh ini, kita membuat fungsi yang memeriksa umur seseorang. Apabila seseorang cuba untuk memasukkan umur negatif, kita naikkan ValueError dengan mesej ubahsuai. Blok try-except di luar fungsi menangkap pengecualian ini dan cetak mesej ralat.
Ingat, mengangkat pengecualian harus dilakukan dengan berhati-hati. Itu adalah alat yang berkuasa, tetapi penggunaannya berlebihan boleh menjadikan kod anda lebih sukar untuk difahami dan diuruskan.
Dalam kesimpulan, mengerti dan menggunakan pengecualian dalam-buat Python secara efektif adalah penting untuk menulis kod yang kuat dan tahan ralat. Itu adalah seperti belajar untuk menavigasi laut - mengerti tentang kemungkinan badai (pengecualian) dan cara menguruskan mereka akan menjadikan perjalanan pemrograman anda lebih halus dan lebih menyenangkan.
Terus untuk praktis, tetap untuk kuroi dan jangan takut untuk menghadapi pengecualian - mereka adalah peluang untuk belajar dan meningkatkan kod anda!
Credits: Image by storyset