Latest web development tutorials

la gestione delle eccezioni Python

Python fornisce due funzioni molto importanti per gestire le eccezioni e gli errori programma Python che appare nell'operazione. È possibile utilizzare questa funzionalità per programmi Python debug.

  • La gestione delle eccezioni: Python sito di tutorial descrizione specifica.
  • Assert (asserzioni): Python sito di tutorial descrizione specifica.

eccezioni standard pitone

Il nome dell'eccezione descrizione
BaseException La classe base per tutte le eccezioni
SystemExit richiesta Interprete per uscire
KeyboardInterrupt Interrupt utente esecuzione (di solito entrare ^ C)
eccezione Errore generale classe di base
StopIteration Iterator non più valori
GeneratorExit Generator (generatore) per notificare l'uscita anomala
StandardError Tutta la classe base standard incorporato per le eccezioni
ArithmeticError Tutte le classi di base errore numerico
FloatingPointError errore di calcolo in virgola mobile
OverflowError operazioni numeriche hanno superato il limite massimo
ZeroDivisionError Oltre a (o modulo) zero (tutti i tipi di dati)
AssertionError errore di asserzione
AttributeError Questo oggetto ha alcuna proprietà
EOFError Nessun built-in di ingresso e di arrivo indicatore EOF
EnvironmentError classe di sistema di base errore operativo
IOError operazioni di input / output per fallire
OSError Errore del sistema operativo
WindowsError chiamata di sistema non è riuscita
ImportError Modulo di importazione / oggetto non è riuscita
LookupError query base di dati di classe non valido
IndexError Senza questo indice sequenza (indice)
KeyError Senza questa mappatura dei tasti
MemoryError errore di overflow di memoria (per Python interprete non è fatale)
NameError Sommerso / inizializzare l'oggetto (non di proprietà)
UnboundLocalError L'accesso variabile locale non inizializzata
ReferenceError oggetti riferimento debole (debole) di riferimento hanno cercato di accedere alla raccolta dei rifiuti di
RuntimeError Errore generale di runtime
NotImplementedError Il metodo non è stato implementato
SyntaxError Errore di sintassi di Python
IndentationError errore di rientro
TabError Tab e lo spazio mix
SystemError Di solito errore di sistema interprete
TypeError tipo di operazione non valido
ValueError argomenti non validi passati a
UnicodeError errori correlati a Unicode
UnicodeDecodeError Decodifica Unicode di errore
UnicodeEncodeError errore di codice Unicode
UnicodeTranslateError Errore di conversione Unicode
avvertimento classe base di avviso
DeprecationWarning Avvertenze sulle funzioni deprecate
FutureWarning Avvertimenti circa la futura struttura della semantica sono cambiati
OverflowWarning Il vecchio avvertimento circa promosso automaticamente un intero lungo (lungo) di
PendingDeprecationWarning Sarà un avvertimento sulle caratteristiche dei rifiuti
RuntimeWarning comportamento runtime sospetto (comportamento runtime) warning
SyntaxWarning avvertenze sintassi sospetto
UserWarning Avverte il codice utente generazione

Che cosa è anormale?

Tale eccezione è un evento che si verifica durante l'esecuzione del programma, che interessano la normale esecuzione del programma.

In circostanze normali, quando i programmi Python non gestire correttamente si verifica un'eccezione.

Eccezione è oggetto Python che rappresenta un errore.

Un'eccezione si verifica quando lo script Python abbiamo bisogno di catturare gestirlo, altrimenti il ​​programma sarà terminato.


Gestione delle eccezioni

È possibile intercettare l'eccezione utilizzando try / except.

try / except viene utilizzata per rilevare gli errori nel blocco try, in modo che, ad eccezione dichiarazione per intercettare l'eccezione ed elaborare le informazioni.

Se non si desidera che un'eccezione si verifica quando la fine del programma, basta provare a prenderlo al suo interno.

sintassi:

La seguente è una semplice prova .... tranne ... la sintassi altro:

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

provare lavori, quando si inizia un try è, pitone saranno contrassegnati nel contesto del programma in corso, in modo che quando si verifica un'anomalia può essere di nuovo qui, provare la clausola viene eseguito per primo, cosa succede dopo dipende esecuzione se vi è una eccezione.

  • Se un'eccezione si verifica quando si tenta di eseguire quando l'istruzione dopo, pitone salto indietro per cercare di eseguire il primo corrispondente clausola except è l'eccezione, l'elaborazione delle eccezioni è completato, il flusso di controllo attraverso l'intera istruzione try (tempo salvo deroga viene elaborato e innescare una nuova eccezioni).
  • Se un'anomalia si verifica nel try dopo gli anni, ma nessuna corrispondenza clausola except, un'eccezione sarà sottoposta alla parte superiore del tentativo, o alla parte superiore del programma (che si concluderà il programma, e stampare un messaggio di errore predefinito).
  • Se si verifica un'eccezione quando si tenta clausola non viene eseguita, pitone else sarà eseguito dopo l'istruzione (se poi il resto), quindi il flusso di controllo attraverso l'intera istruzione try.

Esempi

Ecco un semplice esempio, si apre un file, il contenuto del contenuto del file è scritto, e non si verifica un'eccezione:

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

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

L'output del programma di cui sopra:

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

Esempi

Ecco un semplice esempio, si apre un file, il contenuto scritto nel contenuto del file, ma il file non ha permessi di scrittura, si è verificata un'eccezione:

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

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

Prima di eseguire il codice al fine di facilitare i test, siamo in grado di rimuovere prima l'accesso in scrittura al file testfile comando è il seguente:

chmod -w testfile

Quindi eseguire il codice di cui sopra:

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

Tranne senza utilizzare alcun tipo di eccezione con

È possibile utilizzare senza alcun tipo di eccezione eccezione, i seguenti esempi:

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

Sopra modo try-except per catturare tutte le eccezioni che si verificano. Ma questo non è un buon modo, attraverso questo programma, non siamo in grado di identificare le informazioni eccezione specifica. Perché cattura tutte le eccezioni.


E con l'uso di più tipi di eccezioni tranne

È inoltre possibile utilizzare lo stesso, tranne le dichiarazioni di gestire più eccezioni, come segue:

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

try-finally

try-finally, se si verifica un'eccezione eseguirà il codice finale.

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

Esempi

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

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

Se si apre un file non ha permessi di scrittura, l'uscita è il seguente:

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

Lo stesso esempio può anche essere scritto come segue:

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

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

Quando gettato un'eccezione nel blocco try, il blocco finally di codice immediatamente.

infine bloccare tutte le dichiarazioni dopo l'esecuzione, l'eccezione viene attivato di nuovo e di esecuzione, tranne il codice di blocco.

Contenuto del parametro è diverso da l'eccezione.


parametri anormali

Un'eccezione può prendere parametri, come parametri di output di informazione anomalia.

È possibile intercettare l'eccezione attraverso le dichiarazioni dei parametri con le seguenti eccezioni:

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

variabili di valori anomali in genere inclusi nella dichiarazione ricevuta eccezione. Le variabili in forma di tuple possono ricevere uno o più valori.

Tuple in genere contiene la stringa di errore, il numero sbagliato, posizione sbagliata.

Esempi

I seguenti sono esempi di una sola eccezione:

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

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

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

I risultati delle procedure di cui sopra sono i seguenti:

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

trigger anormale

Siamo in grado di utilizzare l'istruzione di elevarsi innescare un'eccezione

aumentare sintassi è la seguente:

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

dichiarazione eccezione è il tipo di eccezione (per esempio, NameError) parametro è un valore di parametro anormale. Questo parametro è facoltativo, se non previsto, l'argomento eccezione è "Nessuno".

L'ultimo argomento è facoltativo (raramente utilizzato nella pratica), se vi è un oggetto eccezione traccia.

Esempi

Un'eccezione può essere una stringa, una classe o un oggetto. eccezione di Python fornite dal kernel, la maggior parte sono istanze della classe, che è un parametro di un'istanza di una classe.

Molto semplice definizione di un'eccezione, come segue:

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

Nota: Per essere in grado di catturare l'eccezione, "tranne" dichiarazione deve essere utile per gettare lo stesso oggetto classe di eccezione o una stringa.

Ad esempio, abbiamo catturare più di una eccezione, "tranne" l'istruzione è la seguente:

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

Esempi

#!/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

L'attuazione del codice di cui sopra, l'output è:

$ 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)

eccezioni definite dall'utente

Con la creazione di una nuova classe di eccezione, il programma può nominare le proprie eccezioni. eccezioni tipiche dovrebbero essere ereditati dalla classe Exception, direttamente o indirettamente.

In seguito è associato con RuntimeError esempio esempio creare una classe, la classe base è RuntimeError, per l'output ulteriori informazioni quando viene attivato un'eccezione.

Nel blocco try, l'utente esegue un blocco di istruzioni tranne eccezione personalizzata, variabile e viene utilizzato per creare istanze di classe Networkerror.

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

Dopo aver definito le categorie di cui sopra, è possibile attivare l'eccezione, come segue:

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