2009-06-23 8 views
0

J'ai le code suivant:Est-ce que python a une fonction "causes_exception()"?

def causes_exception(lamb): 
    try: 
     lamb() 
     return False 
    except: 
     return True 

Je me demandais si elle venait déjà dans une bibliothèque intégrée?

/YGA

Edit: Thx pour tout le commentaire. Il est en fait impossible de détecter si le code provoque une exception sans l'exécuter - sinon vous pourriez résoudre le problème d'arrêt (lever une exception si le programme s'arrête). Je voulais juste une manière syntaxiquement propre de filtrer un ensemble d'identifiants pour ceux où le code ne l'a pas fait.

Répondre

2

Je ne suis pas au courant de cette fonction, ou quelque chose de similaire, dans la bibliothèque standard Python.

Il est plutôt trompeur - si je l'ai vu utilisé, je pourrais penser qu'il vous a dit sans appeler la fonction si la fonction pouvait déclencher une exception.

+0

Je suis d'accord. Pas que j'ai jamais rencontré une telle méthode. – Josiah

8

Non, autant que je sache, il n'y a pas une telle fonction dans la bibliothèque standard. Comment cela serait-il utile? Je veux dire, sans doute vous l'utiliser comme ceci:

if causes_exception(func): 
    # do something 
else: 
    # do something else 

Mais au lieu, vous pouvez simplement faire

try: 
    func() 
except SomeException: 
    # do something else 
else: 
    # do something 
4

Il y a assertRaises(exception, callable) dans unittest module et c'est probablement le seul endroit où ce contrôle est logique.

En code régulier, vous ne pouvez jamais être sûr à 100% que causes_exception que vous avez suggéré ne cause aucun effet secondaire.

Questions connexes