Latest web development tutorials

Python penanganan eksepsi

python memberikan dua fungsi yang sangat penting untuk menangani pengecualian dan kesalahan program python yang muncul dalam operasi itu. Anda dapat menggunakan fitur ini untuk program python debug.

  • penanganan eksepsi: Python situs tutorial deskripsi spesifik.
  • Menegaskan (Pernyataan): Python situs tutorial deskripsi spesifik.

pengecualian standar python

Nama pengecualian deskripsi
BaseException Kelas dasar untuk semua pengecualian
SystemExit permintaan Interpreter untuk keluar
KeyboardInterrupt Pengguna Interrupt Pelaksana (biasanya masuk ^ C)
pengecualian kelas dasar umum kesalahan
Iterasi stop Iterator ada nilai lebih
GeneratorExit Generator (generator) untuk memberitahukan keluar yang abnormal
StandardError Semua standar kelas dasar built-in untuk pengecualian
ArithmeticError Semua kelas dasar kesalahan numerik
FloatingPointError kesalahan perhitungan floating-point
OverflowError operasi numerik melebihi batas maksimum
ZeroDivisionError Selain (atau modulus) nol (semua jenis data)
AssertionError kegagalan pernyataan
AttributeError Objek ini memiliki properti
EOFError Tidak ada built-in input dan tiba EOF marker
EnvironmentError Operasi kelas sistem dasar kesalahan
IOError operasi input / output untuk gagal
OSError Kesalahan sistem operasi
WindowsError System call gagal
ImportError Impor Modul / objek gagal
LookupError kelas tidak valid query data base
IndexError Tanpa indeks urutan ini (indeks)
KeyError Tanpa pemetaan kunci ini
MemoryError kesalahan memori overflow (untuk Python interpreter tidak fatal)
NameError Dideklarasikan / menginisialisasi objek (bukan milik)
UnboundLocalError Akses variabel lokal diinisiasi
ReferenceError objek referensi yang lemah (referensi lemah) telah mencoba untuk mengakses pengumpulan sampah dari
RuntimeError error runtime umum
NotImplementedError Metode ini belum dilaksanakan
SyntaxError Python kesalahan sintaks
IndentationError kesalahan indent
TabError Tab dan ruang campuran
SystemError Kesalahan sistem biasanya interpreter
TypeError Valid jenis operasi
ValueError argumen yang tidak valid disahkan pada
UnicodeError kesalahan Unicode terkait
UnicodeDecodeError decoding Unicode kesalahan
UnicodeEncodeError Kesalahan kode Unicode
UnicodeTranslateError kesalahan konversi Unicode
peringatan kelas dasar peringatan
DeprecationWarning Peringatan tentang fitur usang
FutureWarning Peringatan tentang struktur masa depan semantik telah berubah
OverflowWarning Peringatan sekitar secara otomatis dipromosikan ke integer panjang (long) dari
PendingDeprecationWarning Ini akan menjadi peringatan tentang karakteristik limbah
RuntimeWarning perilaku runtime yang mencurigakan (runtime perilaku) peringatan
SyntaxWarning peringatan sintaks yang mencurigakan
UserWarning Memperingatkan generasi kode pengguna

Apa yang tidak normal?

pengecualian bahwa ini merupakan acara yang akan terjadi selama pelaksanaan program, yang mempengaruhi pelaksanaan program normal.

Dalam keadaan normal, ketika program Python tidak benar menangani pengecualian terjadi.

Pengecualian adalah Python objek yang mewakili kesalahan.

Pengecualian terjadi ketika script Python kita perlu untuk menangkap menanganinya, jika tidak program akan dihentikan.


Penanganan Exception

Anda dapat menangkap pengecualian menggunakan mencoba / kecuali pernyataan.

mencoba / kecuali pernyataan digunakan untuk mendeteksi kesalahan dalam blok try, sehingga kecuali pernyataan untuk menangkap pengecualian dan memproses informasi.

Jika Anda tidak ingin pengecualian terjadi ketika akhir program Anda, hanya mencoba untuk menangkapnya di dalam.

sintaks:

Berikut ini adalah mencoba sederhana .... kecuali ... sintaks lain:

try:
<语句>        #运行别的代码
except <名字>:
<语句>        #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

mencoba bekerja, ketika memulai sebuah pernyataan try adalah, python akan ditandai dalam konteks program saat ini, sehingga ketika suatu kelainan terjadi bisa kembali ke sini, coba klausa dijalankan pertama, apa yang terjadi berikutnya tergantung pada eksekusi apakah ada pengecualian.

  • Jika pengecualian terjadi ketika Anda mencoba untuk melakukan ketika pernyataan setelah, python melompat kembali untuk mencoba dan melakukan pencocokan pertama kecuali klausa pengecualian, pengolahan pengecualian selesai, aliran kontrol pada melalui seluruh pernyataan try (waktu kecuali pengecualian diproses dan memicu baru pengecualian).
  • Jika kelainan terjadi dalam laporan mencoba setelah bertahun-tahun, tapi tidak ada yang cocok kecuali klausul, pengecualian akan diserahkan ke bagian atas coba, atau ke atas program (yang akan mengakhiri program, dan mencetak pesan kesalahan default).
  • Jika pengecualian terjadi ketika Anda mencoba klausa tidak dijalankan, python pernyataan lain akan dieksekusi setelah pernyataan (jika kemudian lain), maka aliran kontrol melalui seluruh pernyataan try.

contoh

Berikut ini adalah contoh sederhana, membuka file, isi dari isi file ditulis, dan tidak terkecuali terjadi:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

Di atas Output Program:

$ python test.py 
内容写入文件成功
$ cat testfile       # 查看写入的内容
这是一个测试文件,用于测试异常!!

contoh

Berikut ini adalah contoh sederhana, membuka file, isi tertulis dalam isi file, tetapi file tersebut tidak memiliki izin menulis, pengecualian terjadi:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

Sebelum mengeksekusi kode dalam rangka memfasilitasi pengujian, pertama kita dapat menghapus akses tulis ke file testfile perintah adalah sebagai berikut:

chmod -w testfile

Kemudian jalankan kode di atas:

$ python test.py 
Error: 没有找到文件或读取文件失败

Kecuali tanpa menggunakan jenis terkecuali dengan

Anda dapat menggunakan tanpa jenis pengecualian kecuali, contoh-contoh berikut:

try:
    正常的操作
   ......................
except:
    发生异常,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

Atas cara mencoba-kecuali pernyataan untuk menangkap semua pengecualian yang terjadi. Tapi ini bukan cara yang baik, melalui program ini kita tidak dapat mengidentifikasi informasi pengecualian tertentu. Karena itu menangkap semua pengecualian.


Dan dengan penggunaan beberapa jenis pengecualian kecuali

Anda juga dapat menggunakan yang sama kecuali laporan untuk menangani beberapa pengecualian, sebagai berikut:

try:
    正常的操作
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   发生以上多个异常中的一个,执行这块代码
   ......................
else:
    如果没有异常执行这块代码

mencoba-akhirnya pernyataan

mencoba-akhirnya pernyataan, apakah pengecualian terjadi akan melakukan kode akhir.

try:
<语句>
finally:
<语句>    #退出try时总会执行
raise

contoh

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
finally:
    print "Error: 没有找到文件或读取文件失败"

Jika Anda membuka file tidak memiliki izin menulis, output sebagai berikut:

$ python test.py 
Error: 没有找到文件或读取文件失败

Contoh yang sama juga dapat ditulis sebagai berikut:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    try:
        fh.write("这是一个测试文件,用于测试异常!!")
    finally:
        print "关闭文件"
        fh.close()
except IOError:
    print "Error: 没有找到文件或读取文件失败"

Ketika dilemparkan pengecualian dalam blok try, akhirnya blok kode segera.

akhirnya memblokir semua pernyataan setelah eksekusi, pengecualian dipicu lagi dan eksekusi kecuali kode blok.

Isi dari parameter yang berbeda dari pengecualian.


parameter yang abnormal

Pengecualian dapat mengambil parameter, sebagai parameter output informasi kelainan.

Anda dapat menangkap pengecualian melalui pernyataan parameter kecuali sebagai berikut:

try:
    正常的操作
   ......................
except ExceptionType, Argument:
    你可以在这输出 Argument 的值...

variabel outlier biasanya disertakan dalam laporan pengecualian diterima. Variabel dalam bentuk tupel mungkin menerima salah satu atau lebih nilai.

Tupel biasanya berisi string kesalahan, nomor yang salah, lokasi yang salah.

contoh

Berikut ini adalah contoh dari satu pengecualian:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def temp_convert(var):
    try:
        return int(var)
    except ValueError, Argument:
        print "参数没有包含数字\n", Argument

# 调用函数
temp_convert("xyz");

Hasil dari prosedur di atas adalah sebagai berikut:

$ python test.py 
参数没有包含数字
invalid literal for int() with base 10: 'xyz'

pemicu yang abnormal

Kita dapat menggunakan pernyataan untuk meningkatkan diri memicu pengecualian

meningkatkan sintaks adalah sebagai berikut:

raise [Exception [, args [, traceback]]]

Pernyataan pengecualian adalah jenis pengecualian (misalnya, NameError) parameter adalah nilai parameter abnormal. Parameter ini bersifat opsional, jika tidak tersedia, argumen pengecualian adalah "Tidak".

Argumen terakhir adalah opsional (jarang digunakan dalam praktek), jika ada benda jejak pengecualian.

contoh

Pengecualian dapat berupa string, kelas atau objek. pengecualian Python disediakan oleh kernel, sebagian besar contoh dari kelas, yang merupakan parameter sebuah instance dari kelas.

definisi yang sangat sederhana dari pengecualian, sebagai berikut:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

Catatan: Untuk dapat menangkap pengecualian, "kecuali" pernyataan harus berguna untuk membuang objek kelas pengecualian yang sama atau tali.

Sebagai contoh, kita menangkap lebih dari pengecualian, "kecuali" pernyataan adalah sebagai berikut:

try:
    正常逻辑
except "Invalid level!":
    触发自定义异常    
else:
    其余代码

contoh

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义函数
def mye( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

try:
    mye(0)                // 触发异常
except "Invalid level!":
    print 1
else:
    print 2

Pelaksanaan kode di atas, output adalah:

$ python test.py 
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    mye(0)
  File "test.py", line 7, in mye
    raise Exception("Invalid level!", level)
Exception: ('Invalid level!', 0)

pengecualian pengguna-didefinisikan

Dengan menciptakan kelas pengecualian baru, program ini mungkin nama pengecualian mereka sendiri. pengecualian khas harus diwarisi dari kelas Exception, baik secara langsung maupun tidak langsung.

Mengikuti dikaitkan dengan RuntimeError contoh misalnya membuat kelas, kelas dasar RuntimeError, untuk keluaran informasi tambahan ketika pengecualian dipicu.

Di blok try, pengguna melakukan pernyataan blok kecuali pengecualian kustom, variabel e digunakan untuk membuat contoh class Networkerror.

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

Setelah Anda menentukan kategori di atas, Anda dapat memicu pengecualian, sebagai berikut:

try:
    raise Networkerror("Bad hostname")
except Networkerror,e:
    print e.args