[英]pass all current variables to function in python
我想在Python中调用一个函数,该函数允许我在执行过程中访问所有当前变量(用于调试)。 像这样:
def interruptWithTerminal():
interruptchoice = ""
while interruptchoice != "Y":
interruptchoice = raw_input("print what variable? (Y to continue script): ")
try:
print eval(interruptchoice)
except:
print "Error"
我的问题是在调用此函数时无法访问变量。 有任何想法吗?
使用CPython,您可以找到调用者的框架
frame = inspect.currentframe().f_back
并使用frame.f_locals
和frame.f_globals
访问其本地和全局变量。
import inspect
def interruptWithTerminal():
frame = inspect.currentframe().f_back
while True:
interruptchoice = raw_input("print what variable? (Press Enter to continue): ")
if not interruptchoice.strip(): break
try:
print eval(interruptchoice, frame.f_globals, frame.f_locals)
except:
print "Error"
由于Y
可以是变量,所以也许让用户按Enter
即可跳出循环。
像这样吗
>>> var = True
>>> import __main__ as main
>>> for attr in dir(main):
print str(attr), '=', repr(getattr(main, attr))
__builtins__ = <module '__builtin__' (built-in)>
__doc__ = None
__name__ = '__main__'
__package__ = None
attr = 'attr'
main = <module '__main__' (built-in)>
var = True
您可以像这样制作所有变量的字典:
>>> var = True
>>> import __main__ as main
>>> d = {attr:getattr(main, attr) for attr in dir(main)}
>>> d
{'attr': 'var', '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'var': True, '__name__': '__main__', 'main': <module '__main__' (built-in)>, '__doc__': None}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.