繁体   English   中英

将所有当前变量传递给python函数

[英]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_localsframe.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM