我在同一文件夹中有2个文件n1711_001_insilico
和n1711_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
)。在第一个文件中,我明确地从函数中返回mzdf
和charge
并将其称为:
if __name__ == "__main__":
mzdf, charge = CALC(peptides_report, aa_dict, charge_from=1, charge_to=6)
更新:从评论我现在知道问题来自第一个文件中的if __name__ == "__main__":
。我可以在不删除if __name__ == "__main__"
的情况下解决此问题的任何方法吗?
答案 0 :(得分:0)
在您尝试导入的文件中,您有以下声明:
if __name__ == "__main__":
mzdf, charge = CALC(peptides_report, aa_dict, charge_from=1, charge_to=6)
这意味着只有在命令行中直接执行文件时,例如使用python n1711_001_insilico.py
,命令CALC
才会实际运行并执行,这就是设置两者的功能变量mzdf
和charge
。
换句话说,只有当您使用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)