Tuve que escribir la siguiente función para que fallara graciosamente al intentar analizar una cadena en un entero. Me imagino que Python tiene algo incorporado para hacer esto, pero no puedo encontrarlo. Si no, ¿hay una forma más Pythonic de hacer esto que no requiere una función separada?¿Hay una forma incorporada o más de Pythonic para intentar analizar una cadena a un número entero
def try_parse_int(s, base=10, val=None):
try:
return int(s, base)
except ValueError:
return val
La solución que terminé usando fue una modificación de la respuesta de @ sharjeel. Lo siguiente es funcionalmente idéntico, pero, creo, más legible.
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
Lo que tienes parece bien –
@Paul Hildebrandt: No solo es bueno, sino también lo más pitónico. –
Creo que su ejemplo también es valioso para demostrar un uso práctico para los decoradores. –