python如何从文件中导入特定变量,而不获取其他变量的未定义名称错误

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中:

我正在尝试将某个变量从file1导入file2。我导入了所需的变量,但由于无法识别file1中的其他对象,因此出现了一个错误。这些对象是在别处定义的,但我不关心它们在file2中的情况

作为测试,我尝试删除file2中的其他对象,效果很好。但我不能删除这些内容,因为其他文件需要它

在file1.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。