使用异常作为goto pythonic方法?

时间:2017-03-07 15:42:54

标签: python

我有一套复杂的条件,一旦满足,我想退出。

为此,我想在它们周围使用try: / except:结构在正确的时间退出,这类似于goto。一个复杂的例子(使用raise中的breakwhile)将是:

class Minor(Exception):
    pass
class Major(Exception):
    pass

age = 15
while True:
    try:
        if age > 18:
            raise Major
        else:
            raise Minor
    except Major:
        print('major')
        break
    except Minor:
        print('minor')
        break

这样使用pythonic例外吗?换句话说:是否只是为了捕获本来就是Traceback的例外情况,或者它们是否具有如上所述的一般用途?

编辑:以下评论,我想澄清一点,我不是在考虑如何简化这段特定代码 - 实际代码与嵌套循环和条件相比要复杂得多。 我感兴趣的部分是否有理由特别阻止使用例外。

1 个答案:

答案 0 :(得分:4)

不,这不是一种pythonic方法。用于立即从嵌套循环中逃逸的流控制的常用方法是将逻辑放入函数中并使用return语句。

PEP 3136曾被提议作为使用带标签的break和continue语句从嵌套循环中逃脱的一种方法:

  

标记的break和continue可以提高使用嵌套循环的复杂代码的可读性和灵活性。

此PEP因Python 3.1而被拒绝。圭多wrote

  

我因为代码如此复杂而拒绝它   要求此功能非常罕见。在大多数情况下,存在   产生干净代码的解决方法,例如使用' return'。