ImportError:无法从包含if __name__ ==“__ main__”的文件导入X.如果__name__ ==“__ main__”,任何没有删除的解决方案?

时间:2017-11-22 03:15:59

标签: python python-2.7 import python-import

我在同一文件夹中有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)。在第一个文件中,我明确地从函数中返回mzdfcharge并将其称为:

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

更新:从评论我现在知道问题来自第一个文件中的if __name__ == "__main__":。我可以在不删除if __name__ == "__main__"的情况下解决此问题的任何方法吗?

1 个答案:

答案 0 :(得分:0)

在您尝试导入的文件中,您有以下声明:

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)