2009-04-29 4 views
5

En Python, existe-t-il une fonction de langage (ou d'interprète) pour forcer l'interpréteur Python à toujours lever des exceptions même si le code d'exception fautif se trouve dans un bloc try/except?Python - Possibilité de lever des exceptions indépendamment de try/except block?

Je viens d'hériter d'une base de code plus ancienne et plus ancienne écrite en python, dont le but est de communiquer avec du matériel conçu sur mesure que nous avons également développé. de nombreux modèles de codes d'erreurs de communication et les délais d'attente sont masqués/manqués en raison du (simplifié) suivant:

try: 
    serialport.write(MSG) 
except: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    #or just: 
    #pass 

Afin d'éviter le scénario typique de « juste réécrire la chose à partir de zéro », je suis essaie actuellement de corriger toutes les erreurs/délais d'exceptions. Je le fais en désactivant à la main le code de gestion des exceptions, un à la fois.

+1

Je ne peux pas parler à python, puisque je ne l'ai jamais utilisé (d'où la raison pour laquelle je réponds comme un commentaire au lieu d'une vraie réponse), mais la plupart des débogueurs ont la possibilité de "casser toutes les exceptions". Cela peut également être appelé "exceptions de la première chance". Cela permettrait à votre code de rester inchangé, mais traite chaque "lancer" comme un point d'arrêt. Vérifiez pour voir si votre débogueur a cette fonctionnalité. – rmeador

Répondre

11

Le « all-exceptions » except: bloc est une chose remarquable se trouve mauvais et doit simplement et remplacé par raisonnable sauf manipulation.

Dans ce cas grep est votre ami. Un bon IDE peut aider à rendre ces tâches désagréables gérables.

Mais il n'y a pas d'option "ignorer le code comme écrit" en Python.

+1

+1 "ignorer le code tel qu'il est écrit" :-) –

+1

pyparsing est un outil utile pour faire de la transformation de code. –

-2

Vous pouvez utiliser plusieurs gestionnaires d'exceptions pour gérer plusieurs exceptions.

try: 
    serialport.write(MSG) 
except Handler1: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    #or just: 
    #pass 
except Handler2: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not2() 
    #or just: 
    #pass 
3

Non, pas vraiment. Votre meilleur pari est de changer le code à quelque chose de plus comme ceci:

try: 
    serialport.write(MSG) 
except: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    raise 

Cela le fera sur-relancer l'exception exacte. La principale chose que vous devez comprendre est que s'il y avait un moyen de faire sortir toutes les exceptions du système, vous ne seriez pas capable d'utiliser une boucle for (les itérateurs lèvent une exception StopIteration).

Questions connexes