Pengecualian adalah kesalahan yang terjadi selama eksekusi program. Pengecualian diketahui non-programmer sebagai contoh yang tidak sesuai dengan aturan umum. Nama "pengecualian" dalam ilmu komputer juga memiliki arti ini. Ini menyiratkan bahwa masalah (pengecualian) tidak sering terjadi, mis. e. pengecualiannya adalah "pengecualian terhadap aturan". Penanganan pengecualian adalah konstruksi dalam beberapa bahasa pemrograman untuk menangani atau menangani kesalahan secara otomatis. Banyak bahasa pemrograman seperti C++, Objective-C, PHP, Java, Ruby, Python, dan banyak lainnya memiliki dukungan bawaan untuk penanganan pengecualian
Penanganan kesalahan umumnya diselesaikan dengan menyimpan status eksekusi pada saat kesalahan terjadi dan mengganggu aliran normal program untuk mengeksekusi fungsi atau potongan kode khusus, yang dikenal sebagai penangan pengecualian. Bergantung pada jenis kesalahan ("pembagian dengan nol", "kesalahan membuka file" dan seterusnya) yang telah terjadi, penangan kesalahan dapat "memperbaiki" masalah dan program dapat dilanjutkan setelahnya dengan data yang disimpan sebelumnya.
Pelatihan Python langsung
Menikmati halaman ini?
Lihat. Ikhtisar kursus Python langsung
Daftar di sini
Penanganan Pengecualian dengan Python
Penanganan pengecualian di Python sangat mirip dengan Java. Kode, yang menyimpan risiko pengecualian, disematkan di blok percobaan. Sementara di Java pengecualian ditangkap oleh klausa catch, di Python kami memiliki pernyataan yang diperkenalkan oleh kata kunci "kecuali". Dimungkinkan untuk membuat pengecualian "dibuat khusus". Dengan pernyataan kenaikan, dimungkinkan untuk memaksa terjadinya pengecualian tertentu
Mari kita lihat contoh sederhana. Dengan asumsi kami ingin meminta pengguna untuk memasukkan bilangan bulat. Jika kita menggunakan input(), inputnya akan berupa string, yang harus kita masukkan ke dalam bilangan bulat. Jika input bukan bilangan bulat yang valid, kami akan menghasilkan (menaikkan) ValueError. Hal ini kami tunjukkan dalam sesi interaktif berikut ini
n = int(input("Please enter a number: "))
Dengan bantuan penanganan pengecualian, kita dapat menulis kode yang kuat untuk membaca bilangan bulat dari masukan
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _
Ini adalah sebuah loop, yang rusak hanya jika bilangan bulat yang valid telah diberikan. Loop sementara dimasukkan. Kode di dalam klausa try akan dieksekusi pernyataan demi pernyataan. Jika tidak ada pengecualian yang terjadi selama eksekusi, eksekusi akan mencapai pernyataan break dan perulangan while akan ditinggalkan. Jika terjadi pengecualian, i. e. dalam pengecoran n, sisa blok percobaan akan dilewati dan klausa kecuali akan dieksekusi. Kesalahan yang muncul, dalam kasus kami ValueError, harus cocok dengan salah satu nama setelahnya kecuali. Dalam contoh kita hanya satu, i. e. "Kesalahan Nilai. ". Setelah mencetak teks pernyataan cetak, eksekusi melakukan pengulangan lagi. Ini dimulai dengan input baru ()
Kita dapat mengubah kode di atas menjadi sebuah fungsi, yang dapat digunakan untuk mendapatkan masukan yang sangat mudah
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again")
Kami menggunakan ini dengan contoh usia anjing kami dari bab Pernyataan Bersyarat
def dog2human_age(dog_age): human_age = -1 if dog_age < 0: human_age = -1 elif dog_age == 0: human_age = 0 elif dog_age == 1: human_age = 14 elif dog_age == 2: human_age = 22 else: human_age = 22 + (dog_age -2) * 5 return human_age
age = int_input("Age of your dog? ") print("Age of the dog: ", dog2human_age(age)) _
KELUARAN
Not a proper integer! Try it again Not a proper integer! Try it again Age of the dog: 37
Beberapa Klausa Kecuali
Pernyataan try mungkin memiliki lebih dari satu kecuali klausa untuk pengecualian yang berbeda. Tapi paling banyak satu kecuali klausa akan dieksekusi
Contoh kami berikutnya menunjukkan klausa percobaan, di mana kami membuka file untuk dibaca, membaca baris dari file ini dan mengubah baris ini menjadi bilangan bulat. Setidaknya ada dua kemungkinan pengecualian
an IOError ValueError _Untuk berjaga-jaga jika kami memiliki klausa tambahan yang tidak disebutkan namanya kecuali untuk kesalahan yang tidak terduga
import sys try: f = open('integers.txt') s = f.readline() i = int(s.strip()) except IOError as e: errno, strerror = e.args print("I/O error({0}): {1}".format(errno,strerror)) # e can be printed directly without using .args: # print(e) except ValueError: print("No valid integer in line.") except: print("Unexpected error:", sys.exc_info()[0]) raise
KELUARAN
I/O error(2): No such file or directory _
Penanganan IOError pada contoh sebelumnya adalah perhatian khusus. Klausa kecuali untuk IOError menentukan variabel "e" setelah nama pengecualian (IOError). Variabel "e" terikat pada instance pengecualian dengan argumen yang disimpan dalam instance. argumen. Jika kami memanggil skrip di atas dengan file yang tidak ada, kami mendapatkan pesannya
Kesalahan I/O(2). tidak ada berkas atau direktori seperti itu
Dan jika file bilangan bulat. txt tidak terbaca, e. g. jika kami tidak memiliki izin untuk membacanya, kami mendapatkan pesan berikut
Kesalahan I/O(13). Izin ditolak
Sebuah klausa kecuali dapat menyebutkan lebih dari satu pengecualian dalam tupel nama kesalahan, seperti yang kita lihat dalam contoh berikut
try: f = open('integers.txt') s = f.readline() i = int(s.strip()) except (IOError, ValueError): print("An I/O error or a ValueError occurred") except: print("An unexpected error occurred") raise _
KELUARAN
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _0
Kami ingin mendemonstrasikan sekarang, apa yang terjadi, jika kami memanggil fungsi di dalam blok percobaan dan jika pengecualian terjadi di dalam pemanggilan fungsi
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _1
KELUARAN
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _2
fungsi menangkap pengecualian
Kami akan memperluas contoh kami sekarang sehingga fungsi tersebut akan menangkap pengecualian secara langsung
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _3
KELUARAN
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _4
Seperti yang kita duga, pengecualian ditangkap di dalam fungsi dan bukan di pengecualian penelepon
Kami sekarang menambahkan "kenaikan", yang menghasilkan ValueError lagi, sehingga pengecualian akan disebarkan ke pemanggil
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _5
KELUARAN
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _6
Pelatihan Python langsung
Menikmati halaman ini?
Lihat. Ikhtisar kursus Python langsung
Kursus online yang akan datang
Dasar-Dasar Python untuk Pemula
Kursus Lanjutan Intensif
Python untuk Insinyur dan Ilmuwan
Pemrograman Berorientasi Objek dengan Python
Daftar di sini
Pengecualian yang dibuat khusus
Anda dapat membuat Pengecualian sendiri
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _7
KELUARAN
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _8
Cara terbaik atau Pythonic untuk melakukan ini, terdiri dari mendefinisikan kelas pengecualian yang mewarisi dari kelas Pengecualian. Anda harus melalui bab tentang Pemrograman Berorientasi Objek untuk memahami sepenuhnya contoh berikut
while True: try: n = input("Please enter an integer: ") n = int(n) break except ValueError: print("No valid integer! Please try again ...") print("Great, you successfully entered an integer!") _9
KELUARAN
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") 0
Tindakan Pembersihan (coba. akhirnya)
Selama ini pernyataan try selalu dipasangkan dengan exception clauses. Tapi ada cara lain untuk menggunakannya juga. Pernyataan try dapat diikuti oleh klausa finally. Klausa terakhir disebut klausul pembersihan atau penghentian, karena harus dijalankan dalam semua keadaan, i. e. klausa "akhirnya" selalu dijalankan terlepas dari apakah pengecualian terjadi di blok percobaan atau tidak. Contoh sederhana untuk menunjukkan klausa akhirnya
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") 1
KELUARAN
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") 2
Pelatihan Python langsung
Menikmati halaman ini?
Lihat. Ikhtisar kursus Python langsung
Daftar di sini
Menggabungkan mencoba, kecuali dan akhirnya
"akhirnya" dan "kecuali" dapat digunakan bersama untuk blok percobaan yang sama, seperti yang dapat dilihat pada contoh Python berikut
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") _3
KELUARAN
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") _4
Klausa lain
Mencoba. kecuali pernyataan memiliki klausa lain opsional. Blok lain harus diposisikan setelah semua kecuali klausa. Klausa lain akan dieksekusi jika klausa try tidak memunculkan pengecualian
Contoh berikut membuka file dan membaca semua baris ke dalam daftar yang disebut "teks"
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") 5
KELUARAN
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") 6
Contoh ini menerima nama file melalui argumen baris perintah. Jadi pastikan Anda menyebutnya dengan benar. Anggaplah Anda menyimpan program ini sebagai "exception_test. py". Dalam hal ini, Anda harus memanggilnya dengan
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") 7Jika Anda tidak menginginkan perilaku ini, ubah saja baris "file_name = sys. argv[1]" ke "file_name = 'bilangan bulat. txt'"
Contoh sebelumnya hampir sama dengan
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") _8
KELUARAN
def int_input(prompt): while True: try: age = int(input(prompt)) return age except ValueError as e: print("Not a proper integer! Try it again") 6
Perbedaan utamanya adalah pada kasus pertama, semua pernyataan dari blok try dapat menyebabkan pesan kesalahan yang sama "tidak dapat dibuka. ", yang salah, jika fh. tutup() atau fh. readlines() menimbulkan kesalahan