base Python - Exception

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 printappel de fonction. Si nous par printerreur épelle Printva 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 NameErrorerreur 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 EOFErrorerreur, représente a trouvé une fin de fichier * (fin de fichier) * signe (la ctrl-dréalisation) est apparu au moment ne devrait pas se produire.

3. Traitement des exceptions

Nous pouvons utiliser try..exceptpour faire face à des situations anormales. D'une manière générale , nous allons généralement dans les déclarations trydu bloc de code, le processeur d'erreur notre code dans exceptle 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 trybloc de code, et le processeur d'erreur ou d' exception correspondante (gestionnaire) dans l' exceptarticle ou du bloc. exceptArticle 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 exceptphrase et chaque mot trymots 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 elseclause dans le try..exceptbloc de code est associé. elseL' 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 exceptclause, 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' exceptarticle , nous utilisons l'objet d'exception lengthpour atleastimprimer 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 finallyblocs 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.sleepfonction 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 + cpour interrompre ou annuler le programme.

Vous remarquerez KeyboardInterruptune 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 printaprès utilisation sys.stout.flush(), afin qu'il puisse être imprimé immédiatement à l'écran.

6. déclaration

Dans l' tryobtention de bloc de ressources, et les finallyressources de libération est un bloc de mode commun. Par conséquent, il y a une withdé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 openfonction de la withdéclaration - l'opération de fermeture du dossier sera transmis with openautomatisables.

Ce qui se passe dans les coulisses , il est un withprotocole utilisé par l'instruction (Protocole). Il sera acquis par l' openinstruction 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..finallydé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..exceptet l' try..finallyutilisation 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.

ressources

[1] anormal · un octet de python

Publié 66 articles originaux · louange 101 won · vues 30000 +

Je suppose que tu aimes

Origine blog.csdn.net/u010705932/article/details/104418573
conseillé
Classement