Ne détecte que quelques erreurs d'exécution en Python
-
05-07-2019 - |
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?
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'attributargs
.
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