2012-12-05 3 views
10

sagen, dass ich den folgenden Code haben:Wie kann ich eine try-Anweisung in Python zum Testen schnell deaktivieren?

 
try: 
    print 'foo' 
    # A lot more code... 
    print 'bar' 
except: 
    pass 

Wie würde ich zu Testzwecken die try-Anweisung vorübergehend deaktivieren?

Sie können die Zeilen try und except nicht einfach kommentieren, da der Einzug immer noch deaktiviert ist.

Gibt es keinen einfacheren Weg?

 
#try: 
print 'foo' 
# A lot more code... 
print 'bar' 
#except: 
# pass 
+3

Sie generell vermeiden sollten mit „Viel mehr Code“ innerhalb eines 'versuchen:' Block in den ersten Platz. Normalerweise wollen Sie nur eine Zeile drin haben. – wim

+2

Diese Frage ergibt keinen Sinn. Sie deaktivieren keine 'try'-Anweisungen zum Testen, Sie testen, ob es richtig ausgeführt wird. Wenn Sie das Testen wie in einer Art "Prototyping" meinen, bewegen Sie einfach den Code innerhalb der try-Anweisung in eine Funktion und rufen Sie die Funktion direkt auf. – mmgp

Antwort

16

Sie könnten die Ausnahme als die erste Zeile Ihres Ausnahmeblocks reraised, die sich genauso verhalten würde wie ohne die try/except.

try: 
    print 'foo' 
    # A lot more code... 
    print 'bar' 
except: 
    raise # was: pass 
5

Schalten sie in eine if True Anweisung, mit der except Klausel 'kommentierte out' durch die else Zweig (die nie ausgeführt werden):

if True: # try: 
    # try suite statements 
else: # except: 
    # except suite statements 

Die else: ist optional, können Sie auch einfach Kommentieren Sie die ganze except: Suite, aber mit else: können Sie die ganze except: Suite eingerückt und unkommentiert verlassen.

So:

try: 
    print 'foo' 
    # A lot more code... 
    print 'bar' 
except SomeException as se: 
    print 'Uhoh, got SomeException:', se.args[0] 

wird:

if True: # try: 
    print 'foo' 
    # A lot more code... 
    print 'bar' 
else: # except SomeException as se: 
    print 'Uhoh, got SomeException:', se.args[0] 
1

Machen Sie Ihre except nur etwas fangen, dass der try Block nicht werfen:

class FakeError: 
    pass 

try: 
    # code 
except FakeError: # OldError: 
    # catch 

nicht wirklich sicher, ob dies eine gute Idee, aber es funktioniert!

3

Huckepack off Antwort von velotron ist, ich mag die Idee, so etwas wie dies zu tun:

try: 
    print 'foo' 
    # A lot more code... 
    print 'bar' 
except: 
    if settings.DEBUG: # Use some boolean to represent dev state, such as DEBUG in Django 
     raise   # Raise the error 
    # Otherwise, handle and move on. 
    # Typically I want to log it rather than just pass. 
    logger.exception("Something went wrong") 
Verwandte Themen