我正在尝试编写一个使用json和请求模块的脚本。在我编写脚本之前,我正在使用交互式shell上的命令,并且因为为我的代码创建了一个实际文件,所以一切都已经破坏了。我第一次运行代码时,文件夹中出现了一个 pycache 文件夹,我认为这有点突破了。当代码在shell中逐行运行时,不再存在此 pycache 文件夹。我的代码如下:
import json
import requests
r = requests.get('http://api.wunderground.com/api/78c2f37e6d924b1b/hourly/q/CA/Berkeley.json')
data = json.loads(r.text)
for x in range(0, 35):
print(data['hourly_forecast'][x]['FCTTIME']['hour'])
这应打印出天气预报中的所有小时数,但我得到一个“AttributeError:'module'对象没有属性'dumps'。在这个文件夹中,我之前还有另一个使用外部模块的程序也没有长期存在 pycache 文件夹,所以我几乎可以肯定它是导致问题的。但是,删除它并不能解决任何问题,因为代码仍然不起作用,它只是得到重建。
编辑:通过删除整个错误目录并重写所有内容来解决问题。答案 0 :(得分:3)
'module' object has no attribute 'xxx'
的最常见原因,其中' xxx'是一个你知道的属性' '模块'确实如此:您的程序位于具有' module.py'的目录中。你已经忘记了这个模式。因此import module
导入您的模块而不是stdlib(或其他地方)中的预期模块。在python-list上发布了这个问题的多个例子。至少有两个是由于在同一目录中忘记了random.py。
如果您发布了回溯,情况会更清楚。
答案 1 :(得分:0)
请参阅此问题What is pycache?,请参阅@scott_fakename的回答:
当您在python中运行程序时,解释器会将其编译为 字节码首先(这是一个过度简化)并将其存储在 pycache 文件夹。如果您查看那里,您会发现一堆文件在项目文件夹中共享.py文件的名称, 只有他们的扩展名为.pyc或.pyo。这些是 字节码编译和优化的字节码编译版本 程序的文件。
作为一名程序员,你可以在很大程度上忽略它......它所做的就是make 你的程序开始快一点。当你的脚本改变时,他们 将被重新编译,如果您删除文件或整个并运行 你的程序再次出现,它们将重新出现(除非你具体 抑制这种行为)
如果您正在使用cpython(这是最常见的,因为它是 参考实现),你不想要那个文件夹,那么你可以 通过使用-B标志启动解释器来禁止它,例如
python -B foo.py
tcaswell指出的另一个选择是设置 环境变量PYTHONDONTWRITEBYTECODE到任何值(根据 到python的手册页,任何"非空字符串")。
所以,你可以运行:
python -B xxx.py
或者,设置环境变量:
PYTHONDONTWRITEBYTECODE = 1