Python >> Tutoriel Python >  >> Python

Existe-t-il un moyen intégré ou plus Pythonic d'essayer d'analyser une chaîne en un entier

C'est un scénario assez classique, j'ai donc écrit un décorateur "ignore_exception" qui fonctionne pour toutes sortes de fonctions qui lèvent des exceptions au lieu d'échouer gracieusement :

def ignore_exception(IgnoreException=Exception,DefaultVal=None):
    """ Decorator for ignoring exception from a function
    e.g.   @ignore_exception(DivideByZero)
    e.g.2. ignore_exception(DivideByZero)(Divide)(2/0)
    """
    def dec(function):
        def _dec(*args, **kwargs):
            try:
                return function(*args, **kwargs)
            except IgnoreException:
                return DefaultVal
        return _dec
    return dec

Utilisation dans votre cas :

sint = ignore_exception(ValueError)(int)
print sint("Hello World") # prints none
print sint("1340") # prints 1340

def intTryParse(value):
    try:
        return int(value), True
    except ValueError:
        return value, False

C'est la méthode pythonique. En python, il est d'usage d'utiliser le style EAFP - Plus facile de demander pardon que permission.
Cela signifie que vous devez d'abord essayer, puis nettoyer le désordre si nécessaire.