【发布时间】:2016-05-18 23:57:44
【问题描述】:
我有一个我想无限期运行的程序,它显示一个随机的 5 长字母数字字符串,并生成时间。我有一个条件检查字符串以显示生成中包含子字符串。问题是我得到了错误:
RuntimeError: maximum recursion depth exceeded
我有以下几点:
import random,datetime
def gen():
global rand
rand=''.join(random.choice('0123456789abcdefghijklmnopqrstuvwxyz') for i in range(5))
return rand
def main(num):
print datetime.datetime.now(),'::',num
if 'xxx' in num:
print 'Generated string contains xxx! Continuing...'
main(gen())
else:
print datetime.datetime.now(),'::', num
'xxx not in string.'
main(gen())
main(gen())
我该如何转换或纠正这个问题?谢谢
【问题讨论】:
-
将递归改为迭代。递归是没有意义的,显然 Python 不够聪明,无法将其作为尾递归处理。
-
@TomKarzes - Python 没有 TCO,因为GvR felt that a full stack trace was more important。
-
@Tom:这确实是有意义,它只是一种不寻常且不恰当的风格。
-
@TomKarzes:如果您愿意,可以添加 TCO 装饰器,但代码应该以更惯用的方式重写:
for num in iter(gen, None): print("{now}... -
不相关:删除
global rand:它在这里没有任何用处。通常应该避免使用全局变量。