31

次のコードがあるとします。

試す:
    'foo'を出力します
    #もっとたくさんのコード...
    'バー'を印刷
それ外:
    パス

テスト目的で、一時的なtry-statementを無効にするにはどうすればよいですか?

インデントがまだオフになっているため、コメントtryや行をコメントすることはできません。except

これより簡単な方法はありませんか?

#試す:
'foo'を出力します
#もっとたくさんのコード...
'バー'を印刷
#それ外:
# パス
4

4 に答える 4

40

例外をexceptブロックの最初の行として再発生させることができます。これは、try/exceptがない場合と同じように動作します。

try:
    print 'foo'
    # A lot more code...
    print 'bar'
except:
    raise # was: pass
于 2012-12-05T23:48:16.173 に答える
15

ベロトロンの答えに便乗して、私はこのようなことをするというアイデアが好きです:

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")
于 2014-11-21T16:56:24.593 に答える
5

ブロックがスローしないexceptものだけをキャッチします。try

class FakeError:
    pass

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

これが良いアイデアかどうかは実際にはわかりませんが、機能します。

于 2012-12-05T23:47:51.850 に答える
5

それをif Trueステートメントに変換し、ブランチexceptによって「コメントアウト」された句を使用します(これは決して実行されません)。else

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

これelse:はオプションです。スイート全体をコメントアウトすることもできますexcept:が、を使用すると、スイート全体をインデントしてコメントをelse:外したままにすることができます。except:

それで:

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

になります:

if True: # try:
    print 'foo'
    # A lot more code...
    print 'bar'
else: # except SomeException as se:
    print 'Uhoh, got SomeException:', se.args[0]
于 2012-12-05T23:44:12.487 に答える