最大递归深度错误只是另一个异常;你可以捕获RecursionError
异常(Python 3.5或更高版本):
try:
solveMaze(maze)
except RecursionError as err:
print('Sorry but this maze solver was not able to finish '
'analyzing the maze: {}'.format(err.args[0]))
我已经将运行时异常附带的错误消息整合进来了;对于递归错误,错误消息为
maximum recursion depth exceeded
。
如果您需要支持Python 3.5之前的版本,可以捕获基类
RuntimeError
。如果您担心捕获到的运行时错误不是递归深度错误,您可以检查
.args[0]
值。
try:
solveMaze(maze)
except RuntimeError as err:
if err.args[0] != 'maximum recursion depth exceeded':
raise
print('Sorry but this maze solver was not able to finish '
'analyzing the maze: {}'.format(err.args[0]))
选项的演示:
>>> def infinity(): return infinity()
...
>>> try:
... infinity()
... except RecursionError as err:
... print('Oopsie: {}'.format(err.args[0]))
...
Oopsie: maximum recursion depth exceeded
>>> def alter_dict_size():
... dct = {'foo': 'bar'}
... for key in dct:
... del dct['foo']
...
>>> try:
... alter_dict_size()
... except RuntimeError as err:
... print('Oopsie: {}'.format(err.args[0]))
...
Oopsie: dictionary changed size during iteration
>>> try:
... infinity()
... except RuntimeError as err:
... if err.args[0] != 'maximum recursion depth exceeded':
... raise
... print('Oopsie: {}'.format(err.args[0]))
...
Oopsie: maximum recursion depth exceeded
>>> try:
... alter_dict_size()
... except RuntimeError as err:
... if err.args[0] != 'maximum recursion depth exceeded':
... raise
... print('Oopsie: {}'.format(err.args[0]))
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 3, in alter_dict_size
RuntimeError: dictionary changed size during iteration
修改字典大小也会引发
RuntimeError
异常,但测试结果的异常消息可以让您区分开来。