首先我尝试了这个
def x():
try:
1/0 # just an division error to get an exception
except:
x()
Run Code Online (Sandbox Code Playgroud)
这段代码在 3.10 中表现正常,并且得到了我RecursionError: maximum recursion depth exceeded预期的结果,但 3.8 出现了堆栈溢出,并且无法正确处理递归错误。RecursionError但我确实记得旧版本的Python中也有,所以我尝试了
def x(): x()
Run Code Online (Sandbox Code Playgroud)
RecursionError这在两个版本的 Python 中都有体现。
就好像(在第一个片段中)递归错误永远不会在 except 中抛出,而是在调用的函数中抛出,然后在调用但由 try- except 处理的函数的第一条指令处抛出错误。
然后我尝试了其他方法:
def x():
try:
x()
except:
x()
Run Code Online (Sandbox Code Playgroud)
这在某种程度上更奇怪,3.10 以下的堆栈溢出,但在 3.10 中它陷入了循环
你能解释一下这种行为吗?
更新@MisterMiyagi 发现了一个更奇怪的行为,在 except in 中添加语句<=python3.9不会导致 stackoverflow
def x():
try:
1/0
except:
print("")
x()
Run Code Online (Sandbox Code Playgroud) python stack-overflow recursion try-except pythoninterpreter
我正在尝试解决这个 hackerrank 问题https://www.hackerrank.com/challenges/xor-subsequence/problem
\nfrom functools import reduce\n\ndef xor_sum(arr):\n return reduce(lambda x,y: x^y, arr) \n\ndef xorSubsequence(arr):\n freq = {}\n max_c = float("-inf") # init val\n min_n = float("inf") # init val\n \n for slice_size in range(1, len(arr)+1):\n for step in range(0, len(arr)+1-slice_size):\n n = xor_sum(arr[i] for i in range(step,step+slice_size))\n \n freq[n] = freq.get(n,0)+1\n if freq[n] >= max_c and (n < min_n or freq[n]> max_c):\n min_n = n\n max_c = freq[n]\n\n return min_n, freq[min_n]\nRun Code Online (Sandbox Code Playgroud)\n但它超时了,因为它是 ~O(n^3)。\n我觉得有一些数学技巧,有人可以向我解释解决方案吗?我尝试阅读讨论中的一些解决方案,但我不太明白。
\n问题副本:
\n …我在 Lunarvim,我可以使用 检查线路诊断gl。但我不知道如何用光标去那里复制文本,鼠标也不起作用。