Question

J'importe un module qui génère l'erreur suivante dans certaines conditions:     RuntimeError: pyparted nécessite un accès root

Je sais que je peux juste vérifier l'accès root avant l'importation, mais j'aimerais savoir comment intercepter ce type d'erreur spesific via une instruction try / except pour référence future. Existe-t-il un moyen de différencier cette RuntimeError des autres qui pourraient être levées?

Était-ce utile?

La solution

  

Je sais que je peux juste vérifier l'accès root avant l'importation, mais j'aimerais savoir comment intercepter ce type d'erreur spesific via une instruction try / except pour référence future. Existe-t-il un moyen de différencier cette RuntimeError des autres qui pourraient être levées?

Si l'erreur est provoquée par une condition spécifique, alors je pense que le moyen le plus simple de détecter l'erreur est de tester la condition, et vous pouvez générer une erreur plus spécifique vous-même. Après tout, "l'erreur" existe avant que l'erreur soit émise, car dans ce cas, c'est un problème avec l'environnement.

Je suis d'accord avec ce qui précède. La correspondance de texte sur une erreur est une perspective terrifiante.

Autres conseils

Vous pouvez vérifier les attributs de l'exception pour les différencier d'autres exceptions RuntimeError possibles. Par exemple, relancez l’erreur si elle ne correspond pas à un texte de message prédéfini.

    try:
        import pypatred
    except RuntimeError,e:
        if e.message == 'RuntimeError: pyparted requires root access':
            return 'pyparted - no root access'
        raise

Bien entendu, la comparaison directe de texte n’est qu’un exemple. Vous pouvez rechercher des sous-chaînes ou des expressions régulières incluses.

Il est à noter que l'attribut .message des exceptions est déconseillé à partir de Python 2.6 . Vous pouvez trouver le texte dans .args , généralement args [0] .

  

... Pour 2.6, l'attribut message est obsolète au profit de l'attribut args .

try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise

Pour en savoir plus sur la gestion des exceptions dans le didacticiel .

Cette situation devrait produire ImportError à mon avis. Et vous pouvez le faire vous-même:

try:
    import pyparted
except RuntimeError as e:
    raise ImportError(e)

Oui.

   try:
        import module
   except RuntimeError:
         pass
Les importations

sont interprétées comme toute autre instruction, elles ne sont pas spéciales. Vous pourriez faire un

if condition:
     import module
try:
   import ...
except RuntimeError:
   # Do something

RuntimeError levée lorsqu'une erreur est détectée et que n & n 8217; t tombent dans aucune des autres catégories

def foo():
   try:
      foo()
   except RuntimeError, e:
      print e
      print " Runtime Error occurred due to exceeded maximum recursion depth "

C’est ainsi que nous allons détecter l’erreur RuntimeError causée par le dépassement de la limite de récursivité en python

Et si vous souhaitez appeler votre fonction au-delà de la limite de récursivité, vous pouvez effectuer les opérations suivantes

import sys
def foo():
     try:
        foo()
     except RuntimeError, e:
        sys.setrecursionlimit(1200)
        foo()

Mais il est toujours fortement déconseillé de modifier la limite de récursivité, mais de très petites modifications de la limite de récursivité sont autorisées

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top