Il n'y a pas une telle fonction. Vous ne pouvez pas construire une fonction qui fait ce que vous demandez, car au moment où Python appelle iserror()
, l'expression float('123')
ou float('as1f')
a déjà été déjà exécutée; Si une exception est générée, iserror()
n'est jamais exécutée.
Il faudrait déléguer l'appel à la fonction:
def iserror(func, *args, **kw):
try:
func(*args, **kw)
return False
except Exception:
return True
utiliser ensuite comme ceci:
iserror(float, '123') # False
iserror(float, 'as1f') # True
attraper toutes les erreurs est pas terrible mais une idée. Bien que la fonction ci-dessus essaie de faire la bonne chose en attrapant Exception
(et évite ainsi d'attraper SystemExit
ou KeyboardInterrupt
), va attraper MemoryError
, ce qui indique que vous avez manqué de mémoire, pas que les arguments de la fonction que vous avez testés étaient faux!
Toujours essayer d'attraper spécifiques exceptions; vous pouvez étendre iserror()
prendre une exception:
def iserror(func, *args, **kw):
exception = kw.pop('exception', Exception)
try:
func(*args, **kw)
return False
except exception:
return True
alors seul hic ValueError
pour tester vos appels float()
:
iserror(float, '123', exception=ValueError) # False
iserror(float, 'as1f', exception=ValueError) # True
Ce n'est plus lisible que tout. Je voudrais coller avec un simple try..except
en ligne où vous voulez utiliser un appel de fonction qui pourrait déclencher une exception, car alors vous pouvez adapter votre réponse à l'exception spécifique sans avoir à vous répéter pour gérer le résultat après avoir déterminé qu'il a gagné t être une erreur:
while True:
value = raw_input('Please give a number: ')
try:
value = int(value)
break
except ValueError:
print "Sorry, {} is not a valid number, try again".format(value)
qu'en est-il de 'try: function(); out = Vrai; sauf: out = False'? – tglaria
Voilà à quoi sert un bloc d'essai, cela ne fonctionnera-t-il pas pour votre cas d'utilisation? Pour que quelque chose comme ça fonctionne, vous devriez envelopper l'appel de fonction dans un Lamda, de toute façon. – nephets
Semble que vous voulez lire un peu sur la gestion des exceptions. python 2: https://docs.python.org/2/tutorial/errors.html python 3: https://docs.python.org/3/tutorial/errors.html – finalman