150 votes

Comment dois-je mettre try/except en une seule ligne ?

Y a-t-il un moyen en python de transformer un essai/sauf en une seule ligne ?

quelque chose comme...

b = 'some variable'
a = c | b #try statement goes here

b est une variable déclarée et c n'est pas... donc c lancerait une erreur et a deviendrait b...

130voto

dset0x Points 1010

Dans python3, vous pouvez utiliser contextlib.suppress :

from contextlib import suppress

d = {}
with suppress(KeyError): d['foo']

29voto

Version de la réponse poke53280 avec des exceptions limitées attendues.

def try_or(func, default=None, expected_exc=(Exception,)):
    try:
        return func()
    except expected_exc:
        return default

et il pourrait être utilisé comme

In [2]: try_or(lambda: 1/2, default=float('nan'))
Out[2]: 0.5

In [3]: try_or(lambda: 1/0, default=float('nan'), expected_exc=(ArithmeticError,))
Out[3]: nan

In [4]: try_or(lambda: "1"/0, default=float('nan'), expected_exc=(ArithmeticError,))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
[your traceback here]
TypeError: unsupported operand type(s) for /: 'str' and 'int'

In [5]: try_or(lambda: "1"/0, default=float('nan'), expected_exc=(ArithmeticError, TypeError))
Out[5]: nan

23voto

bitagoras Points 171

Une autre façon est de définir un gestionnaire de contexte :

class trialContextManager:
    def __enter__(self): pass
    def __exit__(self, *args): return True
trial = trialContextManager()

Utilisez ensuite l'instruction with pour ignorer les erreurs sur une seule ligne :

>>> with trial: a = 5      # will be executed normally
>>> with trial: a = 1 / 0  # will be not executed and no exception is raised
>>> print a
5

Aucune exception ne sera levée en cas d'erreur d'exécution. C'est comme un try: sans le except:.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X