代码之家  ›  专栏  ›  技术社区  ›  GregT

python日志模块突然停止工作,如何修复?[复制品]

  •  -2
  • GregT  · 技术社区  · 7 年前

    我有个剧本叫 requests.py 导入请求包。脚本不能访问包中的属性,或者不能导入这些属性。为什么这不起作用,我该怎么解决?

    以下代码引发 AttributeError .

    import requests
    
    res = requests.get('http://www.google.ca')
    print(res)
    
    Traceback (most recent call last):
      File "/Users/me/dev/rough/requests.py", line 1, in <module>
        import requests
      File "/Users/me/dev/rough/requests.py", line 3, in <module>
        requests.get('http://www.google.ca')
    AttributeError: module 'requests' has no attribute 'get'
    

    以下代码引发 ImportError .

    from requests import get
    
    res = get('http://www.google.ca')
    print(res)
    
    Traceback (most recent call last):
      File "requests.py", line 1, in <module>
        from requests import get
      File "/Users/me/dev/rough/requests.py", line 1, in <module>
        from requests import get
    ImportError: cannot import name 'get'
    

    或从 requests 包裹:

    from requests.auth import AuthBase
    
    Traceback (most recent call last):
      File "requests.py", line 1, in <module>
        from requests.auth import AuthBase
      File "/Users/me/dev/rough/requests.py", line 1, in <module>
        from requests.auth import AuthBase
    ImportError: No module named 'requests.auth'; 'requests' is not a package
    
    0 回复  |  直到 7 年前
        1
  •  50
  •   idjaw    9 年前

    这是因为您的本地模块名为 requests.py 阴影已安装 requests 您正在尝试使用的模块。当前目录的前缀是 sys.path ,因此本地名称优先于已安装的名称。

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

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

    File "/Users/me/dev/rough/requests.py", line 1, in <module>
    

    要导入的模块: 请求

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

    python可以生成 requests.pyc 文件位于 请求者 文件(在 __pycache__ python 3中的目录)。在重命名之后也删除它,因为解释器仍会引用该文件,从而重新生成错误。然而, pyc 文件在 皮亚卡谢尔 应该 如果 py 文件已被删除。

    在本例中,将文件重命名为 my_requests.py 去除 请求程序 ,然后再次运行成功打印 <Response [200]> .

        2
  •  9
  •   Dave Rove    7 年前

    对于原始问题的编写者,以及那些搜索“attributeerror:module has no attribute”字符串的人,根据接受的答案,通常的解释是,用户创建的脚本与库文件名存在名称冲突。但是,请注意,故障可能不在生成错误的脚本(如上面的情况)中,也不在由该脚本显式导入的库模块的任何名称中。要找出是哪个文件导致了这个问题,可能需要一点调查工作。

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

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

    如果你有 以前 写了一个剧本叫做 numbers.py 因为“decimal”库调用标准库“numbers”,但会找到旧脚本。即使您已经删除了它,它也可能不会结束问题,因为python可能已经将其转换为字节码并将其作为 numbers.pyc “,所以你也得把它找下来。