J'ai dû écrire la fonction suivante pour échouer gracieusement en essayant d'analyser une chaîne en un entier. J'imagine que Python a quelque chose de intégré pour le faire, mais je ne le trouve pas. Sinon, y a-t-il une façon plus Pythonique de faire cela qui ne nécessite pas de fonction séparée?
def try_parse_int(s, base=10, val=None):
try:
return int(s, base)
except ValueError:
return val
La solution que j'ai finalement utilisée était une modification de la réponse de @ sharjeel. Ce qui suit est fonctionnellement identique, mais, je pense, plus lisible.
def ignore_exception(exception=Exception, default_val=None):
"""Returns a decorator that ignores an exception raised by the function it
decorates.
Using it as a decorator:
@ignore_exception(ValueError)
def my_function():
pass
Using it as a function wrapper:
int_try_parse = ignore_exception(ValueError)(int)
"""
def decorator(function):
def wrapper(*args, **kwargs):
try:
return function(*args, **kwargs)
except exception:
return default_val
return wrapper
return decorator