python如何从文件中导入特定变量,而不获取其他变量的未定义名称错误
我正在尝试将某个变量从file1导入file2。我导入了所需的变量,但由于无法识别file1中的其他对象,因此出现了一个错误。这些对象是在别处定义的,但我不关心它们在file2中的情况 作为测试,我尝试删除file2中的其他对象,效果很好。但我不能删除这些内容,因为其他文件需要它 在file1.py中:python如何从文件中导入特定变量,而不获取其他变量的未定义名称错误,python,python-import,Python,Python Import,我正在尝试将某个变量从file1导入file2。我导入了所需的变量,但由于无法识别file1中的其他对象,因此出现了一个错误。这些对象是在别处定义的,但我不关心它们在file2中的情况 作为测试,我尝试删除file2中的其他对象,效果很好。但我不能删除这些内容,因为其他文件需要它 在file1.py中: var1 = 5 object1.member1 = 4 # "object1" class instantiation created elsewhere 在file2.py中:
var1 = 5
object1.member1 = 4 # "object1" class instantiation created elsewhere
在file2.py中:
from file1 import var1
var2 = var1 + 6
错误:
File “file1.py”, line 2, in <module> object1.member1 = 4
NameError: name ‘object1’ is not defined
object1.member1=4中的文件“file1.py”,第2行
NameError:未定义名称“object1”
我希望“从fileX导入varX”只导入varX的值,而不必担心fileX的其余部分
理想的结果是:var2=11。我看到了几种可能性
file1.py
,使其在任何其他模块导入时都能正常运行。该文件的设计和现在一样糟糕,所以请还清技术债务并对其进行适当编程file1.py
复制到另一个模块,比如说file1\u Copy.py
,他们修改它以删除有问题的代码。从修改后的副本导入,而不是从原始副本导入file1.py导入。相反,将其视为文本文件。将其作为文本文件打开,并在各行之间循环。当您找到一行以可能的空格开头时,然后是文本var1
(以空格结尾)或var1=
,然后解析该行的其余部分以获得所需的var1
值。这取决于行var=5
不是“隐藏”而是从一行开始
file1.py
作为文本文件,但这次使用正则表达式查找var1=
。这可能会失败,但比上一个选项更可能成功。当然,您需要了解正则表达式您的文件1(至少在这个简化的示例中)缺少定义
object1
的文件0的导入。问题是您的file1
模块不是模块化的:它不包含原子的、封装的特性集。如果您的用例包括在不使用object1
的情况下使用var1
的要求,那么您违反了创建file1
时所做的模块化假设
您需要拆分file1
以满足您的使用模型。这没有意义。如果文件1中未定义object1
,则任何人都无法导入该文件。该文件根本不是有效的Python。不,它不是object1
的作用域为file1命名空间。唯一的办法就是进行一些可怕的exec
hack。