在Python 3中导入模块时的AttributeError

时间:2014-11-06 18:58:41

标签: python json python-3.x attributeerror

我正在尝试编写一个使用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 文件夹,所以我几乎可以肯定它是导致问题的。但是,删除它并不能解决任何问题,因为代码仍然不起作用,它只是得到重建。

编辑:通过删除整个错误目录并重写所有内容来解决问题。

2 个答案:

答案 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