【问题标题】:AttributeError when importing modules in Python 3在 Python 3 中导入模块时出现 AttributeError
【发布时间】:2015-01-03 10:08:04
【问题描述】:

我正在尝试编写一个使用 json 和 requests 模块的脚本。在我编写脚本之前,我在交互式 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'。在这个文件夹中,我之前还有另一个使用外部模块的程序也没有long 适用于 pycache 文件夹的存在,所以我几乎可以肯定它导致了问题。但是,删除它并不能解决任何问题,因为代码仍然不起作用,它只是被重新创建。

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

【问题讨论】:

  • 您之前是否进行过某种测试?尝试使用python -B 运行,看看是否能解决问题。

标签: python json python-3.x attributeerror


【解决方案1】:

'module' object has no attribute 'xxx' 的最常见原因是,其中“xxx”是您“知道”“module”确实具有的属性,是:您的程序位于具有您拥有的“module.py”的目录中忘记了。所以import module 导入您的模块而不是 stdlib(或其他地方)中的预期模块。在 python-list 上发布了多个有关此问题的示例。至少有两个是由于同一目录中的一个被遗忘的 random.py。

如果您发布了回溯,情况会更清楚。

【讨论】:

    【解决方案2】:

    请参考这个 SO 问题What is pycache?,查看@scott_fakename 的回答:

    当您在 python 中运行程序时,解释器会将其编译为 字节码优先(这是一个过度简化)并将其存储在 pycache 文件夹。如果您在那里查看,您会发现一堆文件共享项目文件夹中的 .py 文件的名称, 只有它们的扩展名是 .pyc 或 .pyo。这些是 字节码编译和优化的字节码编译版本 程序的文件,分别。

    作为一名程序员,你基本上可以忽略它......它所做的只是让 你的程序启动得快一点。当你的脚本改变时,它们 将被重新编译,如果您删除文件或整个文件并运行 你的程序再次出现,它们会重新出现(除非你特别 抑制这种行为)

    如果您使用的是 cpython(这是最常见的,因为它是 参考实现)并且你不想要那个文件夹,那么你可以 例如,通过使用 -B 标志启动解释器来抑制它

    python -B foo.py

    另一个选项,如 tcaswell 所述,是设置 环境变量 PYTHONDONTWRITEBYTECODE 为任何值(根据 到python的手册页,任何“非空字符串”)。

    所以,你可以运行:

    python -B xxx.py
    

    或者,设置环境变量:

    PYTHONDONTWRITEBYTECODE = 1
    

    【讨论】:

    • 我看到了那个答案,并使用 -B 标志运行 python,虽然它阻止了 pycache 文件夹的创建,但 AttributeError 仍然显示。设置环境变量也无济于事。
    • 你在 virtualenv 中吗?您的情况可能需要重新安装
    • 什么是 virtualenv? python本身也不是问题,如果我切换到另一个目录一切都很好。我应该删除文件夹并重试所有内容吗?
    • @thenorm,是的,如果更改目录将解决此问题。如果您在 virtualenv 下,我的意思是重新安装 json 模块。 virtualenv 是一个包装器,用于将您的 pip 模块安装与系统范围的安装分开
    • 我认为我不需要重新安装 json 模块。无论如何,我删除了整个目录并重写了所有内容,这似乎可行。知道为什么会这样吗?
    猜你喜欢
    • 2018-12-07
    • 2017-05-06
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多