解决Python报错指南:ImportError下无法从”Y”导入名为‘X’的问题

最近又在调代码了,又又又又又遇到了“ImportError: cannot import name X from Y ”错误,显然这是在导入包时的错误,索性总结一下所有可能,以后方便查原因。

Python报这个错有很多种原因,大致如下:

  1. 正在导入的模块、函数、类或者要从中导入的模块的名称拼写错误。
  2. 在文件之间循环导入
  3. 尝试导入的模块、函数或者类只有在某些库的指定版本存在,亦或者Pyhon的版本不支持某些版本的库。
  4. 尝试导入的模块、函数、类同名自己编写的py文件。

那么逐一给出各个原因解决办法:

1.拼写错误

如今IDE基本上都有拼写检查功能,逐一检查,类名,函数名,模块名的拼写即可。

2.循环导入

先举一个循环导入的例子:

例如这是一个“main.py”和“Fuc1.py”

# main.py:
from Fuc1 import multiply

def addition(a, b):
    return a + b

print(multiply(5, 5))
# Fuc1.py
from main import addition 


def multiply(a, b):
    return a * b

print(addition(5, 5))

不难看出连个文件在相互调用各自的内部方法,导致程序无法正常执行,解决方法也很简单——新建一个py文件作为方法库,用于保存addition()和multiply(),这是一种很经典的项目开发储存自定义函数的方法。例如:Fuc2.py如下:

# Fuc2.py
def addition(a,b):
    return a+b

def multiply(a,b):
    return a*b

 则main.py和fuc1.py可更改为:

# main.py
from fuc2 import multiply

print(multiply(a,b))
#fuc1.py
from fuc2 import addition

print(addition(a,b))

这样一来不仅避免循环调用问题,也是项目文件和机构更加整洁清晰。

3.版本不匹配

3.1对于一些模块的方法调用在不同的模块中的用法或者定义不同,甚至随着模块版本的更新,有些方法会被移除或者被其他方法代替,因此要确保你的想要调用的方法在你所使用的模块版本中

3.2另外不同的python版本可能对应不同的模块版本,使用了错误的模块版本也会导致此类错误的产生。 

4.自己的py文件与某些第三方库同名

例如,你将你自己项目中的某个py文件命名为numpy.py,当你想使用numpy库中的方法时,就会导致报错。

总结:

导致报错ImportError: cannot import name ‘X’ from ‘Y’,原因大致如上,希望对大家有用。

作者:可爱的三粪哥

物联沃分享整理
物联沃-IOTWORD物联网 » 解决Python报错指南:ImportError下无法从”Y”导入名为‘X’的问题

发表回复