Gestion des erreurs Python

Je publierai ce que j'ai pris des notes sur la gestion des erreurs en Python. Veuillez vous référer au lien ci-dessous pour plus de détails.

https://docs.python.jp/3/tutorial/errors.html

environnement

Python 3.x

Qu'est-ce que l'erreur?

Il existe (au moins) deux types d'erreurs distincts. C'est une erreur de syntaxe et une exception.

Une erreur de syntaxe fait référence à un problème avec la syntaxe de Python. Cela peut également être une erreur externe dans le code. Puisque Python exprime des blocs de code par indentation, je pense que c'est un langage hautement lisible et moins susceptible de provoquer des erreurs de syntaxe.

D'autre part, l'exception peut être considérée comme une erreur interne dans le code. Par exemple, le code suivant est correct dans le code Python, mais mathématiquement étrange, n'est-ce pas?

test = 10 / 0 # <=Il ne peut pas être divisé par 0!

De cette façon, le problème qui se produit lorsque le code est exécuté est une exception.

Erreur de confrontation

Les erreurs de syntaxe sont automatiquement détectées par l'interpréteur lorsqu'il interprète le programme, vous pouvez donc corriger la partie en colère.

Mais comment gérez-vous les exceptions?

Python fournit une syntaxe telle que «try» et «except »pour gérer les exceptions. Regardons un exemple concret.

try:
    answer = 10 / 0
except ZeroDivisionError:
    print("divided by zero!!!")

Il y a deux points dans le code ci-dessus.

  1. Exécutez du code qui peut provoquer des exceptions dans le bloc de la clause try
  2. Dans le bloc de la clause ʻexcept, spécifiez le type` de l'exception qui peut se produire dans la clause try, et exécutez le traitement dans ce cas.

Dans ce cas, l'exception «ZeroDivisionError», qui indique que la division par 0 a été effectuée, est générée à partir de la clause try, et elle est traitée sous «sauf ZeroDivisionError».

Comme vous pouvez le voir, utilisez try ~ except pour gérer les exceptions.

Divers cas d'utilisation

Prend en charge l'exécution de la fonction

Définissez la fonction divide, qui prend deux nombres comme arguments et renvoie le quotient, comme suit.

def divide(x, y):
    answer = x / y
    return answer

Cela semble bon à première vue. Cependant, comme nous l'avons vu, nous devons faire attention à la division. Lorsque divide (10, 0) etc. est exécuté, ZeroDivisionError se produira. Améliorons la fonction comme suit, en considérant le cas où 0 est passé comme deuxième argument (0 est passé à la suite d'un calcul au lieu de littéralement 0).

import math

def divide(x, y):
    try:
        answer = x / y
    except ZeroDivisionError:
        print("numbers cannot be divided by zero!")
        answer = math.nan
    return answer

Même si vous le divisez par 0, le programme fonctionnera pour le moment! Cependant, que se passe-t-il si vous recevez un argument inattendu, tel qu'une chaîne ou tapple ... Je ne décrirai pas la réponse ici, mais essayez de la mettre en œuvre en gardant à l'esprit les points suivants.

  1. Quel type d'exception est levé si l'opération ne peut pas être effectuée correctement
  2. Est-il probable qu'un suivi correct des exceptions (traitement dans la clause d'exception) sera nécessaire?

Si vous vous souciez trop des exceptions, votre code peut gonfler et gâcher la lisibilité, alors pensez au cas par cas.

Insère un traitement commun, qu'une exception se produise

Même si une exception se produit ou que vous ne vous mettez pas en colère, vous voudrez peut-être faire quelque chose en commun. C'est un peu douloureux comme exemple concret, mais regardez le code ci-dessous.

try:
    answer = 10 / 0
except ZeroDivisionError as e:
    answer = math.nan
finally:
    print(answer)

Un nouveau mot-clé appelé «enfin» est apparu. En utilisant ce mot-clé, le traitement spécifié dans la clause finally sera effectué indépendamment du fait qu'une exception se produise ou non.

A propos, ʻas e est utilisé dans la clause ʻexcept, mais c'est pour contenir l'objet d'exception généré dans une variable appelée ʻe` afin qu'il puisse être référencé dans les blocs suivants. Par conséquent, si vous modifiez le code comme indiqué ci-dessous, le contenu de l'exception sera affiché.

#réduction
except ZeroDivisionError as e:
    print(type(e)) # => <class 'ZeroDivisionError'>
    print(e.args)  # => ('division by zero',)
    print(e)       # => division by zero

Quelle est la portée de la variable?

En Python, la portée des variables est essentiellement déterminée par l'indentation du code. Ensuite, la variable ʻam_i_visible définie dans le code suivant peut-elle être référencée dans le premier print () `?

try:
    am_i_visible = "yes"
except:
    do_something()

print(am_i_visible) # => ???

Vous pouvez vous référer à la bonne réponse. Je pense que «oui» est sorti. Dans ce cas, vous pouvez y faire référence car le retrait est utilisé pour clarifier la distance de la clause try.

Python peut être un peu déroutant dans sa portée ... Dans l'instruction for ci-dessous, la variable n devient une variable globale ...

sum = 0
for n in range(1, 5):
    sum = sum + n

print(n) # => 4

finalement

C'est facile, mais j'ai résumé la gestion des erreurs de Python. Il y a encore plus à aborder sur la gestion des exceptions de Python, mais c'est tout.

Je suis encore nouveau sur Python, donc si vous avez des conseils, écrivez-les dans les commentaires.

Recommended Posts

Gestion des erreurs Python
Gestion des erreurs de trame principale
Gestion des exceptions Python
Gestion des erreurs SikuliX
Gestion des fuseaux horaires Python
django.db.migrations.exceptions.InconsistentMigrationHistory Gestion des erreurs
Gestion des exceptions Python
Manipuler yaml avec python
À propos de la gestion des erreurs Tweepy
Manipulation de json en python
Erreur Python non implémentée
Erreur python d'aujourd'hui: tué
Liste des erreurs Python (japonais)
Python, à propos de la gestion des exceptions
Gestion des points décimaux Python
Gestion des erreurs dans PythonBox
Comment gérer l'hexadécimal en Python3
Gestion des erreurs GraphQL (gqlgen)
Autour de la gestion des erreurs de feedparser
[Python] pour une erreur d'instruction
[Contre-mesures d'erreur] Gestion des erreurs d'installation de django-heroku
Réponse aux erreurs lors de l'installation de mecab-python
Gestion des exceptions Python (mémo d'apprentissage Python ⑥)
À propos de FastAPI ~ Gestion des erreurs de point de terminaison ~
Python
[Python] Mémorandum sur l'évitement des erreurs SQLAlchemy
python> Gestion des tableaux 2D
Manipulation de python sur mac
[youtube-dl] Erreur SSL python3 (CERTIFICATE_VERIFY_FAILED)
Erreur lors de la lecture avec python
#python python évitement des erreurs de syntaxe japonaise
Mémorandum de gestion des erreurs de construction PyCUDA
Traitement des URL relatives en python
Vérification de la version de python de résolution d'erreur
Erreur python du jour: SyntaxError Caractère non ASCII
Gestion des attributs épars dans une structure arborescente (Python)
Erreur Python: ModuleNotFoundError: aucun module nommé 'flask'
pip installer les erreurs de gestion de mysql pendant python
Définitions de classe Python et gestion des instances
Gestion des exceptions lors de la communication de l'API Python
Gestion des fichiers JSON en Python
Résolution d'erreur Python assez bâclée
Gestion des fuseaux horaires en Python (datetime, pytz)
Erreur python d'aujourd'hui: l'image est vide
Détection d'erreur Python exécutée à partir de Powershell
Gestion des erreurs lors de la mise à jour de Fish shell
Gestion des expressions régulières par PHP / Python
Histoire d'erreur étrange et horrible de Python
python kafka
J'ai essayé de résumer la gestion des exceptions Python
Les bases de Python ⑤
Résumé Python
Python intégré
[Python] Erreur de nom: le nom'urlparse 'n'est pas défini
Notation d'inclusion Python
Technique Python