ImportError: cannot import X from the file that has if __name__ == "__main__". Any solutions without delete if __name__ == "__main__"?

ImportError: cannot import X from the file that has if __name__ == "__main__". Any solutions without delete if __name__ == "__main__"?

我在同一文件夹中有 2 个文件 n1711_001_insilicon1711_002_insilico。我想要第一个文件中的两个变量(mzdf<class 'pandas.core.frame.DataFrame'>charge'int'),所以我在第二个文件的顶部执行 import :

import numpy as np
import pandas as pd
from n1711_001_insilico import mzdf, charge

我得到了 ImportError: cannot import name mzdf(以及 charge)。在第一个文件中,我从函数中显式 return mzdfcharge 并像这样调用它们:

if __name__ == "__main__":
    mzdf, charge = CALC(peptides_report, aa_dict, charge_from=1, charge_to=6)

更新:从评论中我现在知道问题来自第一个文件中的 if __name__ == "__main__":。有什么方法可以在不删除 if __name__ == "__main__"?

的情况下解决这个问题

在您尝试导入的文件中,您有以下语句:

if __name__ == "__main__":
    mzdf, charge = CALC(peptides_report, aa_dict, charge_from=1, charge_to=6)

这意味着只有在命令行中直接执行文件,例如使用python n1711_001_insilico.py,命令CALC实际上运行并被执行,这就是设置两个变量 mzdfcharge.

的函数

也就是说,只有当你运行直接用python n1711_001_insilico.py的文件时,这两个变量才存在,导入的时候,Python不会运行那个功能。

这是设计使然;导入文件后,变量 __name__ 指向文件名,因此条件失败。

现在,要解决此问题,您必须在导入文件时 运行 CALC 函数,并获取您自己的结果副本:

import numpy as np
import pandas as pd
from n1711_001_insilico import peptides_report, aa_dict, CALC

mzdf, charge = CALC(peptides_report, aa_dict, charge_form=1, charge_to=6)