【发布时间】:2014-08-11 20:28:37
【问题描述】:
为什么这段代码会给出错误:RuntimeError: maximum recursion depth exceeded during compilation? print_test 从不调用自己,因此我认为它不是递归函数。
def print_test():
print("test")
return print_test
print_test() #prints 'test'
print()
#a quick way of writing "print_test()()()()()()()()()()()()()..."
eval("print_test"+"()"*10000) #should print 'test' 10000 times
当我测试它时,它在 Python 2.7.7rc1 中工作,但在 Python 3.3.5 中出现错误。 pdb 提供一个短调用堆栈,与超过最大递归深度时通常存在的高堆栈不同。
Traceback (most recent call last):
File "/usr/lib/python3.3/pdb.py", line 1662, in main
pdb._runscript(mainpyfile)
File "/usr/lib/python3.3/pdb.py", line 1543, in _runscript
self.run(statement)
File "/usr/lib/python3.3/bdb.py", line 405, in run
exec(cmd, globals, locals)
File "<string>", line 1, in <module>
File "/home/beet/overflow.py", line 1, in <module>
def print_test():
出于好奇,我想知道这一点,并意识到这不是最佳编程实践。
【问题讨论】:
-
在您的脚本上运行
pdb是否会告诉您任何信息? -
编译期间超出,而不是执行。该函数没有破坏堆栈;您在字节码编译器中遇到了某种限制。
标签: python python-3.x recursion