Python3中requests.get失效:切换目录运行脚本报错求助
解决非当前目录运行Python脚本时requests.get的AttributeError问题
兄弟,我一眼就揪出问题根源了——你踩了Python模块命名冲突的大坑!
看报错回溯里这关键的一行:
File "/Users/pavel/Documents/Code/threading.py", line 10, in
url = requests.get(host,headers = headers)
这说明Python在尝试导入标准库的threading模块时,没找到系统自带的那个,反而加载了你自己写的threading.py文件!原因是当你在非当前目录运行脚本时,你的/Users/pavel/Documents/Code/目录被加入到了Python的模块搜索路径里,Python会优先搜索这个目录下的文件,于是就和标准库的threading重名冲突了。
更糟的是,你自己的threading.py里还用到了requests.get,这时候requests模块还没完成整个导入流程(因为它正卡在导入threading的环节),所以就抛出了AttributeError: module 'requests' has no attribute 'get'的错误——其实不是requests没有get方法,是导入流程被打断了。
解决方法非常简单:
- 立刻重命名你的
threading.py文件:别用和Python标准库模块一样的名字,比如改成my_threading_script.py或者其他你能记住的独特名字。如果你的主脚本里有导入这个文件的语句,记得同步修改导入的文件名。 - (不推荐的备选方案)如果实在不想改名,可以在主脚本最开头调整Python的模块搜索路径,把系统库的路径放在最前面,确保优先加载标准库:
import sys # 把你的Python标准库路径放到搜索列表最前面 sys.path.insert(0, '/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7') # 再导入requests import requests
这个问题和requests本身完全没关系,重装requests、改主脚本名都是没用的,核心就是避免自定义模块和标准库重名。
内容的提问来源于stack exchange,提问作者WxXiong
相关产品推荐
相关产品推荐

