Latest web development tutorials

gestion des exceptions Python

python fournit deux fonctions très importantes pour gérer les exceptions et les erreurs programme de python qui apparaît dans l'opération. Vous pouvez utiliser cette fonction pour les programmes de python de débogage.

  • La gestion des exceptions: Python site tutoriel description spécifique.
  • Affirmez (Assertions): Python site tutoriel description spécifique.

exceptions standard de python

Le nom de l'exception description
BaseException La classe de base pour toutes les exceptions
SystemExit demande Interprète pour quitter
KeyboardInterrupt Utilisateur Interrompre exécution (habituellement entrer ^ C)
exception Erreur générale classe de base
StopIteration Iterator plus, les valeurs
GeneratorExit Générateur (génératrice) de notifier la sortie anormale
StandardError Tout de la classe de base standard intégré pour les exceptions
ArithmeticError Tout numérique classe de base d'erreur
FloatingPointError Virgule flottante erreur de calcul
OverflowError Les opérations numériques ont dépassé la limite maximale
ZeroDivisionError En plus (ou module) zéro (tous les types de données)
AssertionError insuffisance Assertion
AttributeError Cet objet n'a pas de propriété
EOFError Aucune entrée intégrée et d'arriver marqueur EOF
EnvironmentError Fonctionnement classe système erreur de base
IOError opérations d'entrée / sortie à l'échec
OSError erreur de système d'exploitation
WindowsError appel système a échoué
ImportError Module d'importation / object échoué
LookupError requêtes de base de données de classe non valide
IndexError Sans cet indice de séquence (index)
KeyError Sans cette cartographie clé
MemoryError erreur de débordement de mémoire (pour l'interpréteur Python est pas fatale)
NameError Présence non déclarée / initialiser l'objet (non la propriété)
UnboundLocalError Accès variable locale non initialisée
ReferenceError objets de référence faibles (de référence faible) ont tenté d'accéder à la collecte des déchets de
RuntimeError Erreur générale d'exécution
NotImplementedError La méthode n'a pas été mise en œuvre
SyntaxError Python erreur de syntaxe
IndentationError erreur Indent
TabError Tab et de l'espace mix
SystemError erreur système Habituellement interprète
TypeError Invalid type d'opération
ValueError Les arguments non valides passés dans
UnicodeError erreurs Unicode liées
UnicodeDecodeError décodage d'erreur unicode
UnicodeEncodeError Unicode erreur de code
UnicodeTranslateError Unicode erreur de conversion
avertissement Avertissement classe de base
DeprecationWarning Avertissements sur les fonctionnalités dépréciées
FutureWarning Avertissements au sujet de la future structure de la sémantique ont changé
OverflowWarning Le vieux avertissement promu au sujet automatiquement à un entier long (long) de
PendingDeprecationWarning Ce sera un avertissement sur les caractéristiques des déchets
RuntimeWarning comportement d'exécution suspect (runtime comportement) avertissement
SyntaxWarning avertissements de syntaxe suspect
UserWarning Avertit la génération de code d'utilisateur

Qu'est-ce anormal?

Cette exception est un événement qui se produira au cours de l'exécution du programme, ce qui affecte l'exécution normale du programme.

Dans des circonstances normales, lorsque les programmes Python ne gèrent pas correctement une exception se produit.

Exception est un objet Python représentant une erreur.

Une exception se produit lorsque le script Python nous devons capturer le manipuler, sinon le programme sera terminé.


Gestion des exceptions

Vous pouvez attraper l'exception en utilisant try / except.

try / except est utilisé pour détecter les erreurs dans le bloc d'essai, de sorte que, sauf déclaration à intercepter l'exception et traiter les informations.

Si vous ne voulez pas une exception se produit lorsque la fin de votre programme, juste essayer de l'attraper à l'intérieur.

Syntaxe:

Ce qui suit est un essai simple , .... sauf ... syntaxe autre:

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

essayer travaux, lors du démarrage d'une instruction try est, python seront marqués dans le cadre du programme en cours, de sorte que lorsqu'une anomalie se produit peut être de retour ici, essayez clause est exécuté en premier, ce qui se passe dépend ensuite sur l'exécution s'il y a une exception.

  • Si une exception se produit lorsque vous essayez d'effectuer lorsque l'instruction après, python revenir en arrière pour essayer de réaliser la première clause except est l'exception, le traitement d'exception est terminée, le flux de contrôle à travers la totalité de l'instruction try (temps, sauf si une exception est traitée et déclenchent une nouvelle exceptions).
  • Si une anomalie se produit dans l'instruction try après les années, mais aucune clause except, une exception sera soumis au sommet de l'essai, ou vers le haut du programme (qui se terminera le programme, et imprimer un message d'erreur par défaut).
  • Si une exception se produit lorsque vous essayez clause est pas exécutée, python instruction else sera exécutée après l'instruction (if then else), puis le flux de contrôle à travers toute instruction try.

Exemples

Voici un exemple simple, il ouvre un fichier, le contenu du contenu du fichier est écrit, et ne constitue pas une exception se produit:

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

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

La sortie du programme ci-dessus:

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

Exemples

Voici un exemple simple, il ouvre un fichier, le contenu écrit dans le contenu du fichier, mais le fichier n'a pas l'autorisation d'écriture, une exception a eu lieu:

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

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

Avant d'exécuter le code afin de faciliter les tests, nous pouvons d'abord supprimer l'accès en écriture au fichier testfile commande est la suivante:

chmod -w testfile

Ensuite, exécutez le code ci-dessus:

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

Sauf sans utiliser tout type d'exception avec

Vous pouvez utiliser sans aucun type d'exception, sauf les exemples suivants:

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

Au-dessus de manière essayez-except pour attraper toutes les exceptions qui se produisent. Mais ce n'est pas une bonne façon, à travers ce programme, nous ne pouvons pas identifier les informations spécifiques d'exception. Parce qu'il capte toutes les exceptions.


Et l'utilisation de plusieurs types d'exceptions à l'exception

Vous pouvez également utiliser le même, sauf les déclarations de gérer plusieurs exceptions, comme suit:

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

essayez-finally

essayez-finally, si une exception se produit exécutera le code final.

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

Exemples

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

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

Si vous ouvrez un fichier n'a pas l'autorisation d'écriture, la sortie est la suivante:

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

Le même exemple peut également être écrit comme suit:

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

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

Lorsque jeté une exception dans le bloc try, le bloc finally de code immédiatement.

enfin bloquer toutes les déclarations après l'exécution, l'exception est déclenchée à nouveau et d'exécution, sauf le code de bloc.

Contenu du paramètre est différent de l'exception.


paramètres anormaux

Une exception peut prendre des paramètres, comme l'information d'anomalie des paramètres de sortie.

Vous pouvez intercepter l'exception à travers des déclarations de paramètres à l'exception de ce qui suit:

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

les variables aberrantes généralement inclus dans l'état d'exception reçue. Variables sous forme de tuples peuvent recevoir une ou plusieurs valeurs.

Tuple contient généralement la chaîne d'erreur, un mauvais numéro, mauvais endroit.

Exemples

Voici quelques exemples d'une seule exception:

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

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

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

Les résultats des procédures ci-dessus sont les suivantes:

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

Trigger anormale

Nous pouvons utiliser la déclaration d'élever eux-mêmes déclencher une exception

syntaxe soulever est la suivante:

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

déclaration d'exception est le type d'exception (par exemple, NameError) paramètre est une valeur de paramètre anormal. Ce paramètre est optionnel, si non prévu, l'argument d'exception est "None".

Le dernier argument est facultatif (rarement utilisé dans la pratique), s'il y a un objet trace d'exception.

Exemples

Une exception peut être une chaîne, une classe ou d'un objet. l'exception de Python fournies par le noyau, la plupart sont des instances de la classe, qui est un paramètre d'une instance d'une classe.

Très simple définition d'une exception, comme suit:

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

Remarque: Pour être capable d'attraper l'exception, "sauf" déclaration doit être utile de jeter le même objet de classe d'exception ou d'une chaîne.

Par exemple, nous capturons plus une exception, "sauf" déclaration est la suivante:

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

Exemples

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

Mise en œuvre du code ci-dessus, la sortie est:

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

exceptions définies par l'utilisateur

En créant une nouvelle classe d'exception, le programme peut nommer leurs propres exceptions. exceptions typiques devraient être héritées de la classe d'exception, que ce soit directement ou indirectement.

Suivant est associé à instance instance RuntimeError créer une classe, la classe de base est RuntimeError, pour émettre des informations supplémentaires lorsqu'une exception est déclenchée.

Dans le bloc d'essai, l'utilisateur effectue une instruction de bloc, sauf exception personnalisée, la variable e est utilisé pour créer des instances de classe Networkerror.

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

Après avoir défini les catégories ci-dessus, vous pouvez déclencher l'exception, comme suit:

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