【发布时间】:2018-08-30 14:34:01
【问题描述】:
考虑以下代码:
def printlen(x): print(len(x))
def argslist(x): return list(x.args)
def add(value_error, arg): raise Exception(*value_error, *arg)
def fibonacci(a, b, x):
try:
assert b<x
printlen(b)
try:
add(a,b)
except Exception as e:
fibonacci(argslist(e), a, x)
except AssertionError as e:
print(e)
threshold = 1000
fibonacci([[]],[[]],[[]]*threshold)
代码使用 def、try、except 和 raise 打印出从 1 到阈值的斐波那契数两个特殊功能。 如果您删除“assert b threshold 设置为一个非常大的数字,python.exe 将接管 RAM 并冻结所有内容。 是否存在限制嵌套 raises、trys 和 excepts 的机制,或者只是阻止分配这么多内存?
【问题讨论】:
-
肯定有嵌套异常处理;在这里查看答案:stackoverflow.com/questions/19883531/…
-
@gerowam 我在问是否有一种机制可以防止过多的嵌套。
-
啊——类似于异常展开,但具有基于堆栈的递归。我猜不是(正如下面的答案所暗示的那样),因为 Python 被解释并且解释器不知道递归的深度。您可能会遇到递归深度限制,而不是内存不足。也许?
-
@gerowam 递归深度是运行时的事情,因此它与“解释”与“编译”无关。被编译或解释也不是语言的属性,而是来自语言实现(有 C 解释器 FWIW)。最后,CPython(参考实现)被编译成字节码,所以说它是“解释的”并不完全准确......
标签: python python-3.x