31

假设我有以下代码:

尝试:
    打印“富”
    # 更多代码...
    打印“酒吧”
除了:
    经过

出于测试目的,我将如何临时禁用 try-statement?

你不能只注释掉tryexcept行,因为缩进仍然是关闭的。

没有比这更简单的方法了吗?

#尝试:
打印“富”
# 更多代码...
打印“酒吧”
#除了:
# 经过
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

背靠 velotron 的回答,我喜欢做这样的事情的想法:

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

把它变成一个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 回答
5

让你except只捕获try块不会抛出的东西:

class FakeError:
    pass

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

实际上不确定这是否是一个好主意,但它确实有效!

于 2012-12-05T23:47:51.850 回答