Lorsque vos exceptions de programme apparaissent anormaux (Exception). Par exemple, lorsque vous voulez lire un fichier, et ce fichier n'existe pas, comment faire? Ou vous lors de l' exécution du programme effacé accidentellement, comment faire? En utilisant ces anomalies à traiter.
De même, s'il y a eu des déclarations non valides dans votre programme , comment faire? Python procédera à ce processus, levage (Soulève) Sa petite main pour vous dire où il y a une erreur (erreur) .
1. erreur
Vous pouvez imaginer simple print
appel de fonction. Si nous par print
erreur épelle Print
va se passer? Vous remarquerez que la première lettre est en majuscule. Dans cet exemple, Python * jeter (Raise) * une erreur de syntaxe.
>>> Print("Hello World")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Print' is not defined
>>> print("Hello World")
Hello World
Vous remarquerez qu'une NameError
erreur a été lancée, alors que Python affichera la position de l'erreur détectée. ** ** faire des choses pour le tort qui est un gestionnaire d'erreur d'erreur (erreur Handler).
2. anormale
** Nous allons essayer de (Try) ** pour lire le contenu de l'entrée de l'utilisateur. Appuyez sur [ctrl-d]
pour voir ce qui se passe.
>>> s = input('Enter something --> ')
Enter something --> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
EOFError
Ici , appelé Python a une EOFError
erreur, représente a trouvé une fin de fichier * (fin de fichier) * signe (la ctrl-d
réalisation) est apparu au moment ne devrait pas se produire.
3. Traitement des exceptions
Nous pouvons utiliser try..except
pour faire face à des situations anormales. D'une manière générale , nous allons généralement dans les déclarations try
du bloc de code, le processeur d'erreur notre code dans except
le bloc de code.
Case (Enregistrer le texte exceptions_handle.py
):
try:
text = input('Enter something --> ')
except EOFError:
print('Why did you do an EOF on me?')
except KeyboardInterrupt:
print('You cancelled the operation.')
else:
print('You entered {}'.format(text))
sortie:
# Press ctrl + d
$ python exceptions_handle.py
Enter something --> Why did you do an EOF on me?
# Press ctrl + c
$ python exceptions_handle.py
Enter something --> ^CYou cancelled the operation.
$ python exceptions_handle.py
Enter something --> No exceptions
You entered No exceptions
Nous allons lancer une exception ou toutes les déclarations d'erreur possibles dans le try
bloc de code, et le processeur d'erreur ou d' exception correspondante (gestionnaire) dans l' except
article ou du bloc. except
Article peut gérer une erreur particulière ou une exception ou une erreur ou une exception est indiquée entre parenthèses. Si aucune erreur ou le nom de l'exception, il se chargera de toutes les erreurs et exceptions.
Notant la nécessité d'avoir au moins une except
phrase et chaque mot try
mots associés. Dans le cas contraire, il y a un bloc try quel est le point?
S'il n'y a pas d'erreurs ou exceptions sont gérées, Python appellera le gestionnaire par défaut, il n'exécutera le programme de terminal et d'imprimer un message d'erreur. Nous avons vu cette approche dans les chapitres précédents.
Vous pouvez également avoir une else
clause dans le try..except
bloc de code est associé. else
L' article sera exécutée quand aucune exception est survenue.
Un cas dans l'autre, nous allons aussi apprendre comment obtenir l'objet d'exception afin que nous puissions récupérer des informations supplémentaires.
4. jeté
Vous pouvez raise
être causée par une déclaration inhabituelle, la méthode spécifique est de fournir le mauvais nom ou nom inhabituel et de jeter * (moulinée) * objets insolites.
Vous pouvez déclencher une erreur ou une exception doit être directement ou indirectement dépendantes Exception
(anormales) classes dérivées.
Case (Enregistrer sous exceptions_raise.py
):
# encoding=UTF-8
class ShortInputException(Exception):
'''一个由用户定义的异常类'''
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
try:
text = input('Enter something --> ')
if len(text) < 3:
raise ShortInputException(len(text), 3)
# 其他工作能在此处继续正常运行
except EOFError:
print('Why did you do an EOF on me?')
except ShortInputException as ex:
print(('ShortInputException: The input was ' +
'{0} long, expected at least {1}')
.format(ex.length, ex.atleast))
else:
print('No exception was raised.')
sortie:
$ python exceptions_raise.py
Enter something --> a
ShortInputException: The input was 1 long, expected at least 3
$ python exceptions_raise.py
Enter something --> abc
No exception was raised.
Dans cet exemple, nous créons nos propres types d'exceptions. Ce nouveau type d'exception est appelée ShortInputException
. Il contient deux champs ---- obtenir une longueur donnée du texte d'entrée length
, le programme désiré longueur minimale atleast
.
Dans la except
clause, nous mentionnons la mauvaise classe, les magasins de classe as(为)
l'erreur correspondants ou les noms nom d'exception. Ceci est similaire en forme pour participer à un argument d'appel de fonction. Dans ce cas particulier l' except
article , nous utilisons l'objet d'exception length
pour atleast
imprimer un message approprié aux champs utilisateur.
5. Essayez ... Enfin
Supposons que vous lisez à lire votre document. Comment vous devez vous assurer que l'objet fichier est correctement fermé, que se produit une exception? Cela peut être des finally
blocs accompli.
Enregistrez le programme exceptions_finally.py
:
import sys
import time
f = None
try:
f = open("poem.txt")
# 我们常用的文件阅读风格
while True:
line = f.readline()
if len(line) == 0:
break
print(line, end='')
sys.stdout.flush()
print("Press ctrl+c now")
# 为了确保它能运行一段时间
time.sleep(2)
except IOError:
print("Could not find file poem.txt")
except KeyboardInterrupt:
print("!! You cancelled the reading from the file.")
finally:
if f:
f.close()
print("(Cleaning up: Closed the file)")
sortie:
$ python exceptions_finally.py
Programming is fun
Press ctrl+c now
^C!! You cancelled the reading from the file.
(Cleaning up: Closed the file)
Nous avons lu les opérations de fichiers habituels, mais nous avons aussi à l'aide d' une time.sleep
fonction de toutes les deux secondes est insérée après chaque ligne imprimée dans le sommeil, de sorte que le programme est en cours d' exécution lent (Python fonctionne très rapidement dans des circonstances normales). Lorsque le programme est en cours d'exécution, appuyez sur ctrl + c
pour interrompre ou annuler le programme.
Vous remarquerez KeyboardInterrupt
une exception est levée, puis, le programme se termine. Toutefois, avant la fin du programme, les clauses enfin à mettre en œuvre, l'objet de fichier est toujours fermé.
A noter également que nous sommes print
après utilisation sys.stout.flush()
, afin qu'il puisse être imprimé immédiatement à l'écran.
6. déclaration
Dans l' try
obtention de bloc de ressources, et les finally
ressources de libération est un bloc de mode commun. Par conséquent, il y a une with
déclaration faite ce processus possible dans une attitude propre à remplir.
Enregistrer sous exceptions_using_with.py
:
with open("poem.txt") as f:
for line in f:
print(line, end='')
Le contenu de la sortie du programme devrait être la même sur un cas présenté. Ce mode de réalisation , sauf que nous utilisons est open
fonction de la with
déclaration - l'opération de fermeture du dossier sera transmis with open
automatisables.
Ce qui se passe dans les coulisses , il est un with
protocole utilisé par l'instruction (Protocole). Il sera acquis par l' open
instruction return cible dans ce cas est « thefile ».
Il sera toujours appelé avant le début du bloc de code thefile.__enter__
fonction, et toujours après un appel est terminé , le bloc de code thefile.__exit__
.
Par conséquent, nous finally
écrivons bloc de code code devrait prendre un avis spécial de __exit__
méthodes automatisées. Cela peut nous aider à éviter de répéter utiliser explicitement la try..finally
déclaration.
Pour de plus amples discussions sur ce sujet est au - delà de la portée de ce livre peut être impliqué, donc s'il vous plaît se référer PEP 343 pour comprendre expliqué plus en détail.
résumé
Nous avons discuté try..except
et l' try..finally
utilisation de la phrase. Nous avons également vu comment créer nos propres types d'exception, et la façon de lancer une exception.
Ensuite, nous allons explorer la bibliothèque standard de Python.