2017-09-19 1 views
0

Avec les exceptions étant si central à Python idiomatique, existe-t-il un moyen propre d'exécuter un bloc de code si une expression évalue à Vrai ou l'évaluation de l'expression déclenche une exception? Par clean, je veux dire un Pythonic facile à lire, et ne pas répéter le bloc de code?Exécuter le bloc de code si condition ou exception

Par exemple, au lieu de:

try: 
    if some_function(data) is None: 
     report_error('Something happened') 
except SomeException: 
    report_error('Something happened') # repeated code 

peut-il être proprement réécrite afin que report_error() n'est pas écrit deux fois?

(question similaire. How can I execute same code for a condition in try block without repeating code in except clause mais cela est un cas particulier où l'exception peut être évité par un simple test au sein de l'instruction if)

Répondre

0

Oui, cela peut être fait relativement propre, bien que si elle peut être considéré comme un bon style est une question ouverte.

def test(expression, exception_list, on_exception): 
    try: 
     return expression() 
    except exception_list: 
     return on_exception 

if test(lambda: some_function(data), SomeException, None) is None: 
    report_error('Something happened') 

Ceci provient d'une idée dans le PEP 463 rejetée.

lambda to the Rescue présente la même idée.