如何确定另一个Python文件中是否存在变量

7
我有两个Python文件。从Python文件#1开始,我想检查Python文件#2中是否定义了某个全局变量。
最佳方法是什么?
3个回答

8

您可以直接测试file2模块(一个模块对象)是否具有正确名称的属性:

import file2
if hasattr(file2, 'varName'):
    # varName is defined in file2…

这种方法可能比使用try...except...更直接和易读(取决于您想如何使用它)。

我们也可以获得它的值吗? - DirtyBit
@Yuval Adam的try解决方案是正确的选择。 - Eric O. Lebigot

6
try:
    from file import varName
except ImportError:
    print 'var not found'

或者你可以这样做(如果你已经导入了文件):

import file
# ...
try:
    v = file.varName
except AttributeError:
    print 'var not found'

只有当变量是全局的时,这个方法才可行。如果你想使用局部变量,那么你需要使用内省。


把导入语句放在代码中间可以吗?我指的是这样做不会违反规范。 - paassno
当然,将模块加载推迟到稍后阶段是完全可以接受的。 - Yuval Adam
我在脚本中遇到了问题。由于某种原因,它进入了try语句,通过了,然后进入了except语句? - paassno
如果try块中只有一行代码,那么这是不可能的。你正在错误地进行调试。 - Yuval Adam
是的,我解决了。不知道为什么,当我执行v = file.varName时,即使变量存在,它仍然进入except语句中。更新:使用getattr(file, varName)可以奏效。 - paassno
显示剩余2条评论

3
使用内置函数getattr(),您还可以指定默认值,例如:
import file2

myVar = getattr(file2, attribute, False)

请查看文档

这通常不能回答原始问题:如果变量存在且为false怎么办? - Eric O. Lebigot
那么答案无论如何都是False,所以仍然正确,尽管我明白你的意思。 - locose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接