Gestion des exceptions Python


Cet article répertorie plus en détail la gestion des exceptions courantes en Python pour votre référence, comme suit :

1. Lancement d'exceptions et d'exceptions personnalisées

Python utilise des objets d'exception pour représenter des situations anormales. . Si l'objet d'exception n'est pas géré ou intercepté, le programme terminera l'exécution avec ce qu'on appelle un traceback (un message d'erreur).

①.raise instruction

Le mot-clé raise en Python est utilisé pour déclencher une exception, qui est fondamentalement le même que le mot-clé throw en C# et Java, comme indiqué ci-dessous :

# -- coding: utf-8 --

def ThorwErr():
  raise Exception("抛出一个异常")

# Exception: 抛出一个异常
ThorwErr()

Le mot-clé raise est suivi de Throwing est un type d'exception général (Exception). De manière générale, plus l'exception levée est détaillée, mieux c'est. Python a de nombreux types d'exceptions intégrés dans le module d'exceptions. exceptions, comme suit :

import exceptions

# ['ArithmeticError', 'AssertionError'.....]
print dir(exceptions)

Passing exceptions

Si vous interceptez l'exception, mais que vous souhaitez la relancer (passer l'exception), vous pouvez utiliser l'instruction raise sans paramètres :

# -- coding: utf-8 --
class MuffledCalculator:
  muffled = False
  def calc(self,expr):
    try:
      return eval(expr)
    except ZeroDivisionError:
      if self.muffled:
        print 'Division by zero is illegal'
      else:
        raise

②. Type d'exception personnalisé

Vous pouvez également personnaliser votre propre type spécial d'exception en Python, en héritant simplement de la classe Exception (directement ou indirectement) :

class SomeCustomException(Exception):
  pass

2. et en C# Semblable à try/catch, le mot-clé try/sauf est utilisé en Python pour intercepter les exceptions, comme suit :

# -- coding: utf-8 --

try:
  print 2/0
except ZeroDivisionError:
  print '除数不能为0'

① Capture de plusieurs exceptions

Dans une instruction except, seul le type d'exception déclaré. est capturée par la suite, si possible. Si d'autres types d'exceptions sont levées, vous devez ajouter une instruction except, ou vous pouvez spécifier un type d'exception plus général tel que : Exception, comme suit :

# -- coding: utf-8 --
try:
  print 2/'0'
except ZeroDivisionError:
  print '除数不能为0'
except Exception:
  print '其他类型异常'

Afin d'attraper plusieurs exceptions, en plus de déclarer plusieurs En plus de l'instruction except, vous pouvez également répertorier plusieurs exceptions sous forme de tuples après une instruction except :

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '发生了一个异常'

② Obtenir des informations sur les exceptions

Chaque exception aura des informations sur les exceptions. De manière générale, nous devrions ensuite enregistrer ces informations d'exception :

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception) as e:
  # unsupported operand type(s) for /: 'int' and 'str'
  print e

3. Clause final

La clause final est utilisée conjointement avec la clause try, mais contrairement à l'instruction except, l'existence de la clause enfin n'a pas d'importance. une exception à l'intérieur de la clause try , le code de la clausefinal sera exécuté. En général, enfin lui-même est souvent utilisé pour fermer des fichiers ou dans des Sockets.

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '发生了一个异常'
finally:
  print '不管是否发生异常都执行'