Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从脚本导入已安装的包会引发“错误”;AttributeError:模块没有属性";或;ImportError:无法导入名称“;_Python_Exception_Python Module_Shadowing - Fatal编程技术网

Python 从脚本导入已安装的包会引发“错误”;AttributeError:模块没有属性";或;ImportError:无法导入名称“;

Python 从脚本导入已安装的包会引发“错误”;AttributeError:模块没有属性";或;ImportError:无法导入名称“;,python,exception,python-module,shadowing,Python,Exception,Python Module,Shadowing,我有一个名为requests.py的脚本,用于导入requests包。脚本无法从包中访问属性,或者无法导入属性。为什么这不起作用?我该如何修复它 以下代码引发了一个属性错误 import requests res = requests.get('http://www.google.ca') print(res) from requests import get res = get('http://www.google.ca') print(res) 回溯(最近一次呼叫最后一次): 文件“

我有一个名为
requests.py
的脚本,用于导入requests包。脚本无法从包中访问属性,或者无法导入属性。为什么这不起作用?我该如何修复它

以下代码引发了一个
属性错误

import requests

res = requests.get('http://www.google.ca')
print(res)
from requests import get

res = get('http://www.google.ca')
print(res)
回溯(最近一次呼叫最后一次):
文件“/Users/me/dev/rough/requests.py”,第1行,在
导入请求
文件“/Users/me/dev/rough/requests.py”,第3行,在
请求。获取('http://www.google.ca')
AttributeError:模块“requests”没有属性“get”
以下代码引发了一个
ImportError

import requests

res = requests.get('http://www.google.ca')
print(res)
from requests import get

res = get('http://www.google.ca')
print(res)
回溯(最近一次呼叫最后一次):
文件“requests.py”,第1行,在
从请求导入获取
文件“/Users/me/dev/rough/requests.py”,第1行,在
从请求导入获取
ImportError:无法导入名称“get”
或从
请求
包中的模块导入的代码:

from requests.auth import AuthBase
回溯(最近一次呼叫最后一次):
文件“requests.py”,第1行,在
从requests.auth导入AuthBase
文件“/Users/me/dev/rough/requests.py”,第1行,在
从requests.auth导入AuthBase
ImportError:没有名为“requests.auth”的模块“请求”不是一个包

发生这种情况是因为名为
requests.py的本地模块会隐藏您试图使用的已安装的
requests
模块。当前目录的前缀是
sys.path
,因此本地名称优先于安装的名称

出现这种情况时,一个额外的调试技巧是仔细查看回溯,并意识到您的脚本名称与您尝试导入的模块匹配:

请注意脚本中使用的名称:

File "/Users/me/dev/rough/requests.py", line 1, in <module>
文件“/Users/me/dev/rough/requests.py”,第1行,在
您尝试导入的模块:
请求

将模块重命名为其他名称以避免名称冲突

Python可能会在您的
requests.py
文件旁边生成一个
requests.pyc
文件(在Python3的
\uuuuu pycache\uuuu
目录中)。重命名后也删除该文件,因为解释器仍将引用该文件,从而重新生成错误。但是,如果已删除
py
文件,则
中的
pyc
文件不应影响您的代码


在本例中,将文件重命名为
my_requests.py
,删除
requests.pyc
,然后再次运行,可以为原始问题的作者以及在“AttributeError:module has no attribute”字符串上搜索的人成功打印
,根据公认的答案,常见的解释是,用户创建的脚本的名称与库文件名冲突。但是,请注意,问题可能不在生成错误的脚本的名称中(如上所述),也不在该脚本显式导入的库模块的任何名称中。可能需要一些侦查工作来找出是哪个文件导致了问题

作为说明问题的示例,假设您正在创建一个脚本,该脚本使用“decimal”库对十进制数进行精确的浮点计算,并将脚本命名为“
mydecimal.py
”,其中包含行“
import decimal
”。这些都没有问题,但您发现它会引发以下错误:

AttributeError: 'module' object has no attribute 'Number'

如果您以前编写过名为“
numbers.py
”的脚本,则会发生这种情况,因为“decimal”库调用标准库“numbers”,但会找到旧脚本。即使您删除了它,也可能无法解决问题,因为python可能已将其转换为字节码并将其作为“
numbers.pyc
”存储在缓存中,因此您也必须查找它。

python正在您的
requests.py
模块中查找requests对象

将该文件重命名为其他文件或使用

from __future__ import absolute_import 

requests.py
模块的顶部,请注意,这是一个常见问题的规范答案。。。除非你确定另一个问题有更好、更完整的答案,否则请不要重复。