Ho dovuto scrivere la seguente funzione per fallire con garbo quando si tenta di analizzare una stringa in un numero intero. Immagino che Python abbia qualcosa di costruito per farlo, ma non riesco a trovarlo. In caso contrario, esiste un modo più pitonico per fare ciò che non richiede una funzione separata?C'è un modo built-in o più Pythonic per provare ad analizzare una stringa su un intero
def try_parse_int(s, base=10, val=None):
try:
return int(s, base)
except ValueError:
return val
La soluzione che ho utilizzato è stata una modifica della risposta di @ sharjeel. Quanto segue è funzionalmente identico, ma, penso, più leggibile.
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
Quello che devi sembra bene. –
@Paul Hildebrandt: non solo bello, ma il più Pythonic. –
Penso che il tuo esempio sia anche prezioso per dimostrare un uso pratico per i decoratori. –