Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用输入在另一个函数中选择局部变量_Python_Global Variables_Local Variables - Fatal编程技术网

Python使用输入在另一个函数中选择局部变量

Python使用输入在另一个函数中选择局部变量,python,global-variables,local-variables,Python,Global Variables,Local Variables,好吧,我有这个要求,但首先我要解释一下我想要达到的目标。我用许多全局变量编写了一个python脚本,但在不同的模块(.py文件)中定义了许多方法 脚本有时会移动到一个方法,在这个方法中,我调用另一个模块中定义的另一个方法。剧本相当复杂 我的大部分代码都在Try/Except中,因此每次触发异常时,我的代码都会运行一个名为“check_issue()”的方法,在该方法中,我打印以控制回溯,然后我问自己是否有任何变量的值需要双重检查。现在,我阅读了许多有用的页面,其中用户展示了如何使用/选择glob

好吧,我有这个要求,但首先我要解释一下我想要达到的目标。我用许多全局变量编写了一个python脚本,但在不同的模块(.py文件)中定义了许多方法

脚本有时会移动到一个方法,在这个方法中,我调用另一个模块中定义的另一个方法。剧本相当复杂

我的大部分代码都在Try/Except中,因此每次触发异常时,我的代码都会运行一个名为“check_issue()”的方法,在该方法中,我打印以控制回溯,然后我问自己是否有任何变量的值需要双重检查。现在,我阅读了许多有用的页面,其中用户展示了如何使用/选择globals()、locals()和eval()来查看当前的全局变量和局部变量

不过,我特别需要的是能够在方法“check_issue()”中输入变量的名称,该变量可能不是全局变量,也可能不是在方法check_issue()中定义的。 使用类不是一个解决方案,因为我需要更改数百行代码

以下是我已经读过的链接:

这是一个不起作用的示例代码:

a =  4
b = "apple"

def func_a():
    c = "orange"
    ...
    check_issue()

def check_issue():
    print("Something went wrong")
    var_to_review = input("Input name of var you want to review")
    # I need to be able to enter "c" and print the its value "orange"
    print(func_a.locals()[var_to_review ]) # this doesn't work
有人能建议怎么修吗? 非常感谢

当您在
check_issue()
内部调用
locals()
时,您只能访问此函数的局部变量,即:
['var_to_review']

您可以向check_issue函数添加一个参数,并在调用时传递局部变量

a =  4
b = "apple"

def func_a():
    c = "orange"
    check_issue(locals())

def check_issue(local_vars):
    print("Something went wrong")
    var_to_review = input("Input name of var you want to review")
    print(local_vars[var_to_review])

这是一个伟大的第一步,我要感谢你的迅速回答。不过有个问题。上面的代码是我所拥有的真实脚本的简单化表示。也就是说,我可以在方法func_a()内调用check_issue(),func_a()可能在func_b()内被调用,func_b()可能来自另一个名为func_c()的方法。那样的话,你有什么建议?如何从check_issue()检查func_a()、func_b()和func_c()中的局部变量?谢谢