打破无限循环的正确Python异常(不应该是无限的)

时间:2014-07-19 13:10:08

标签: python loops exception

这是我的简化代码:

x = 0
while True:
    x += 1
    if not do_stuff(x)
        break
    if x > 1000000:
        raise Exception("Too many iterations")

1000000是永远不应达到的x值。如果是的话,出现问题并引发异常。对于这样的用例,Exception的适当子类是什么,如果存在的话呢?

3 个答案:

答案 0 :(得分:0)

这种情况不会发生的唯一方法是do_stuff永远不会返回false。

如果是这种情况,请创建自定义异常。 我通常创建一个MiscException(以及更具体的例外)

答案 1 :(得分:0)

如果您不想要,则根本不需要使用例外:

for i in xrange(1000000):
    if not do_stuff(x):
        break
else:
    # too many iterations, do something else.

for / else构造有点奇特,但适合这个用例。如果循环永远不会被破坏,则执行else子句。这里解释得更多:http://nedbatchelder.com/blog/201110/forelse.html

如果您想使用例外进行快速诊断,请不要过度使用该类。例外情况很好。如果您担心某些事情可能会捕获您的异常,那么请使用容易引发的ZeroDivisionError:

if x > 1000000:
    1/0

答案 2 :(得分:-1)

我有同样的问题。我无法为此找到内置于python的任何内容。 IPython使用RuntimeError('maximum recursion depth exceeded')