Maison  >  Article  >  développement back-end  >  Analyse d'exemples de gestion d'exceptions en Python

Analyse d'exemples de gestion d'exceptions en Python

WBOY
WBOYavant
2023-05-16 14:28:061477parcourir

    1. Qu'est-ce qu'une exception

    En python, les exceptions déclenchées par des erreurs sont les suivantes

    Analyse dexemples de gestion dexceptions en Python

    2. Types d'exceptions

    Différentes exceptions en python peuvent être identifiées par différents types, une identification d'exception Une erreur.

    1. Classes d'exception courantes

    • AttributeError Essayer d'accéder à une arborescence qui n'a pas d'objet, comme foo.x, mais foo n'a pas d'attribut

      ImportError Impossible d'importer un module ou un package essentiellement un problème de chemin ou une erreur ; name
    • IndentationError Erreur de syntaxe (sous-classe de); le code n'est pas correctement aligné
    • IndexError L'index de l'indice dépasse les limites de la séquence, comme lorsque x n'a que trois éléments, mais a tenté d'accéder à
    • SyntaxError Le code Python est illégal et le code ne peut pas être compilé (je pense personnellement qu'il s'agit d'une erreur de syntaxe et d'une faute de frappe)

    • TypeError Le type d'objet entrant ne répond pas aux exigences

    • UnboundLocalError Essayer d'accéder à un local qui n'a pas encore été défini Variables, essentiellement parce qu'il existe une autre variable globale du même nom, vous faisant penser que vous y accédez

    • ValueError en transmettant une valeur à laquelle l'appelant ne s'attend pas, même si le type de la valeur est correct

    • 2 . Exemples d'exceptions :

      # TypeError:int类型不可迭代
      for i in 3:
          pass
      
      # ValueError
      num=input(">>: ") #输入hello
      int(num)
      
      # NameError
      aaa
      
      # IndexError
      l=['egon','aa']
      l[3]
      
      # KeyError
      dic={'name':'egon'}
      dic['age']
      
      # AttributeError
      class Foo:pass
      Foo.x
      
      # ZeroDivisionError:无法完成计算
      res1=1/0
      res2=1+'str'

      3. Gestion des exceptions
    • 1. Syntaxe de base try...sauf

      try:
          被检测的代码块
      except 异常类型:
          try中一旦检测到异常,就执行这个位置的逻辑

      Exemple
    • try:
          f = [ 'a', 'a', 'a','a','a', 'a','a',]
          g = (line.strip() for line in f) #元组推导式
          print(next(g))
          print(next(g))
          print(next(g))
          print(next(g))
          print(next(g))
      except StopIteration:
          f.close()
    • La classe d'exception ne peut être utilisée que pour gérer les exceptions spécifiées.

      s1 = 'hello'
      try:
          int(s1)
      except IndexError as e:  # 未捕获到异常,程序直接报错
          print(e)

      2. Exception multi-branches sauf..sauf et exception universelle : Exception
    • s1 = 'hello'
      try:
          int(s1)
      except IndexError as e:
          print(e)
      except KeyError as e:
          print(e)
      except ValueError as e:
          print(e)
      except Exception as e:
          print(e)
    • 3 try/sauf...else

      L'instruction try/sauf a également une clause else facultative. alors il doit être placé après tout sauf les clauses. La clause
    • else sera exécutée lorsqu'aucune exception ne se produit dans la clause try.

      for arg in sys.argv[1:]:
          try:
              f = open(arg, 'r')
          except IOError:
              print('cannot open', arg)
          else:
              print(arg, 'has', len(f.readlines()), 'lines')
              f.close()

      4. L'exécution finale des exceptions. L'instruction enfin
    try-finally exécutera le code final, qu'une exception se produise ou non.

    Définir le comportement de nettoyage :

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    #except Exception as e:
    #    print(e)
    else:
        print('try内代码块没有异常则执行我')
    finally:
        print('无论异常与否,都会执行该模块,通常是进行清理工作')

    #littéral invalide pour int() avec base 10 : 'hello'

    # Indépendamment de l'exception ou non, ce module sera exécuté, généralement pour le nettoyage

    4. Lancer une augmentation d'exception

    Python utilise l'instruction raise pour lever une exception spécifiée. Le format de syntaxe de

    raise est le suivant :

    raise [Exception [, args [, traceback]]]
    try:
        raise TypeError('抛出异常,类型错误')
    except Exception as e:
        print(e)

    raise Le seul paramètre spécifie l'exception à lever. Il doit s'agir d'une instance d'exception ou d'une classe d'exception (c'est-à-dire une sous-classe d'Exception).

    Si vous voulez simplement savoir si cela a généré une exception et que vous ne voulez pas la gérer, alors une simple instruction raise peut la déclencher à nouveau.

    try:
            raise NameError('HiThere')
        except NameError:
            print('An exception flew by!')
            raise
       
    #An exception flew by!
    #Traceback (most recent call last):
    #  File "", line 2, in ?
    #NameError: HiThere

    5. Exceptions personnalisées

    Vous pouvez avoir vos propres exceptions en créant une nouvelle classe d'exceptions. La classe d'exception hérite de la classe Exception, directement ou indirectement, par exemple :

    Dans cet exemple, la valeur par défaut __init__() de la classe Exception est remplacée.

    class EgonException(Exception):
        def __init__(self, msg):
            self.msg = msg
    
        def __str__(self):
            return self.msg
    
    
    try:
        raise EgonException('抛出异常,类型错误')
    except EgonException as e:
        print(e) 
    
    #抛出异常,类型错误

    Classe d'exception de base

    Lors de la création d'un module pouvant générer de nombreuses exceptions différentes, une approche courante consiste à créer une classe d'exception de base pour ce package, puis à créer différentes exceptions pour différentes situations d'erreur basées sur cette classe de base de. :

    La plupart des noms d'exceptions se terminent par "Erreur", tout comme les noms d'exceptions standard.

    class Error(Exception):
        """Base class for exceptions in this module."""
        pass
     
    class InputError(Error):
        """Exception raised for errors in the input.
     
        Attributes:
            expression -- input expression in which the error occurred
            message -- explanation of the error
        """
     
        def __init__(self, expression, message):
            self.expression = expression
            self.message = message
     
    class TransitionError(Error):
        """Raised when an operation attempts a state transition that's not
        allowed.
     
        Attributes:
            previous -- state at beginning of transition
            next -- attempted new state
            message -- explanation of why the specific transition is not allowed
        """
     
        def __init__(self, previous, next, message):
            self.previous = previous
            self.next = next
            self.message = message

    6. Assert

    assert (assert) est utilisé pour juger une expression et déclencher une exception lorsque la condition de l'expression est fausse.

    Les assertions peuvent renvoyer directement une erreur lorsque les conditions ne sont pas remplies pour que le programme s'exécute, sans avoir à attendre que le programme plante après son exécution.

    Le format de syntaxe est le suivant :

    assert expression

    est équivalent à :

    if not expression:
        raise AssertionError

    assert Il peut également être suivi de paramètres :

    assert expression [, arguments]

    est équivalent à :

    if not expression:
        raise AssertionError(arguments)

    L'exemple suivant détermine si le système actuel est Linux. Si les conditions ne sont pas remplies, il sera déclenché directement. Exception, pas besoin d'exécuter le code suivant :

    import sys
    assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"
    # 接下来要执行的代码
    
    # Traceback (most recent call last):
    #    File "C:/PycharmProjects/untitled/run.py", line 2, in 
    #      assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"
    #  AssertionError: 该代码只能在 Linux 下执行
    .

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer