在同一行上多次调用同一函数时。是否可以出于故障排除目的,使用回溯或 sys 库来确定当前正在执行哪个?
编辑:请不要提供解决方法。我知道我需要知道的关于如何解决这个问题的所有信息。我想知道的是,是否有一种方法可以找到有关解析/执行状态的更精确信息,而不仅仅是调用指令的行号。
让我们以这个例子为例:
#!/usr/bin/python3
# coding: UTF-8
def fn(var):
import traceback
print(repr(traceback.extract_stack()[-2]))
return var+1
a = b = 4
print(fn(a)+fn(b))
在空闲时运行它会写:
RESTART: /.../python/framesummary.py
<FrameSummary file /.../python/framesummary.py, line 11 in <module>>
<FrameSummary file /.../python/framesummary.py, line 11 in <module>>
10
有没有办法知道fn函数内部是否正在执行fn(a)或fn(b)?
编辑2:
我添加了一个案例,显示无法使用调用顺序
#!/usr/bin/python3
# coding: UTF-8
def fn(var):
import traceback
stack = traceback.extract_stack()
print(repr(stack[-2]))
print("code = '"+stack[-2][-1]+"'")
import sys
calling_frame = sys._getframe(1)
print("lasti =", calling_frame.f_lasti)
print()
return var+1
a = b = 4
print("case = sum", fn(a)+fn(b), "\n")
for boole in False, True:
print("case =", boole, fn(a) if boole else fn(b), "\n")
将打印:
RESTART: /.../python/framesummary cleaned.py
<FrameSummary file /.../python/framesummary cleaned.py, line 18 in <module>>
code = 'print("case = sum", fn(a)+fn(b), "\n")'
lasti = 34
<FrameSummary file /.../python/framesummary cleaned.py, line 18 in <module>>
code = 'print("case = sum", fn(a)+fn(b), "\n")'
lasti = 43
case = sum 10
<FrameSummary file /.../python/framesummary cleaned.py, line 20 in <module>>
code = 'print("case =", boole, fn(a) if boole else fn(b), "\n")'
lasti = 100
case = False 5
<FrameSummary file /.../python/framesummary cleaned.py, line 20 in <module>>
code = 'print("case =", boole, fn(a) if boole else fn(b), "\n")'
lasti = 88
case = True 5
最好是指示调用的第一个字符,或者重新编译代码以获得与每个调用对应的 lasti 值的方法。
烙印99
白板的微信
相关分类