提问者:小点点

Python中不带变量的导入模块[关闭]


如果我不能修改file1中的_文件以避免引发错误,如何在下面的代码中实现正确的导入?

文件1:

MY_FILE = `something_that_raises_error`

class MyClass:
   def __init__(self):
      print("INSIDE MY CLASS")

class DiffClass:
   def __init__(self, value=MY_FILE):
      print(value)

文件2:

from file1 import MyClass
my_class = MyClass()

最好的选择是,如果它可以修改MY_FILE变量中的File2,然后调用MyClass,但我认为这是不可能的,所以有没有一种方法来导入MyClass而不执行部分代码负责MY_FILEDiffClass


共1个答案

匿名用户

在file1中,您可以添加一个如果__name__ == '__main__':后卫。导入文件时,低于它的任何内容都不会执行。这里有一个你可以测试的例子。在file1中的MY_FILE上放置一个断点,在file2中的print("TEST")上放置一个断点。使用if语句,您将看到只有print("TEST")命中断点,因为没有设置MY_FILE。删除if__name__ == '__main__':并使用断点再次运行,您将看到它命中。

您可以阅读关于Python官方留档的内部工作。

文件1:

# do stuff that executes when imported
class MyClass:
   def __init__(self):
      print("INSIDE MY CLASS")

print("hi")

if __name__ == '__main__':
    # won't execute if file is imported
    MY_FILE = "something_that_raises_error"
    class DiffClass:
        def __init__(self, value=MY_FILE):
            print(value)

文件2:

from file1 import MyClass

print("TEST")