【问题标题】:Python 3 Import error AttributeError: '_ModuleLock_' object has no attribute 'name'Python 3导入错误AttributeError:'_ModuleLock_'对象没有属性'name'
【发布时间】:2018-03-24 18:29:06
【问题描述】:

我正在将一个包从 python 2 更新到 3,但我无法让导入工作。即使是像 import math 或 import os 这样简单的方法。当我闲置运行时,一切正常。

如果我尝试通过终端运行它,我会收到一条加载过程失败的消息。在调试器中,它通过几个文件路径运行并且总是给出相同的错误。 我已经阅读了很多关于进口的文档,并且我相当确定进口是正确的。

import os
...
import logging
...
...
import argparse

log = logging.getLogger(__name__) 


ap = ArgumentParser()

我已找到此文档以确认我做这些正确。

https://docs.python.org/3/library/logging.html

https://docs.python.org/3/howto/argparse.html

无法发布到操作系统的最后一个链接

所以一切似乎都正确,但是当我运行我的代码时,我可以告诉我没有从 argparse 得到输出,这促使我运行调试器。 以下是我得到的错误。

为操作系统

Traceback (most recent call last):
  File "C:/path_to/Apps/python/py-scripts/new/untitled.py", line 3, in <module>
    import logging
  File "<frozen importlib._bootstrap>", line 968, in _find_and_load
  File "<frozen importlib._bootstrap>", line 148, in __enter__
  File "<frozen importlib._bootstrap>", line 174, in _get_module_lock
  File "<frozen importlib._bootstrap>", line 59, in __init__
  File "<frozen importlib._bootstrap>", line 59, in __init__
  File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\bdb.py", line 48, in trace_dispatch
    return self.dispatch_line(frame)
  File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\bdb.py", line 66, in dispatch_line
self.user_line(frame)
  File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\idlelib\debugger.py", line 24, in user_line
    self.gui.interaction(message, frame)
AttributeError: '_ModuleLock' object has no attribute 'name'

用于记录

Traceback (most recent call last):
  File "C:/path_to/Apps/python/py-scripts/new/untitled.py", line 3, in <module>
    import logging
  File "<frozen importlib._bootstrap>", line 968, in _find_and_load
  File "<frozen importlib._bootstrap>", line 148, in __enter__
  File "<frozen importlib._bootstrap>", line 174, in _get_module_lock
  File "<frozen importlib._bootstrap>", line 59, in __init__
  File "<frozen importlib._bootstrap>", line 59, in __init__
  File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\bdb.py", line 48, in trace_dispatch
    return self.dispatch_line(frame)
  File "C:\path_to\AppData\Local\Programs\Python\Python36\lib\bdb.py", line 66, in dispatch_line
    self.user_line(frame)
  File "C:\path_to\AppData\Local\Programs\Python\Python36 \lib\idlelib\debugger.py", line 24, in user_line
    self.gui.interaction(message, frame)
AttributeError: '_ModuleLock' object has no attribute 'name'

在发布此内容时,我注意到它从 AppData 调用库,而不是我安装 python 的位置。这也正常吗?

【问题讨论】:

  • 请包含错误信息的完整回溯。最可能的问题是您当前路径中的某些内容与内置模块发生冲突;错误消息可以帮助诊断。
  • 先生。 Martijn Pieters,我已经更新了这个问题以反映一个最小、完整和可验证的例子,或者我认为。如果可能的话,请移除保留,以便有人能够提供帮助。
  • 我仍然无法重现这一点,并且回溯也不会立即告诉我发生了什么,但我还是重新打开了它。请注意,这些路径可能是记录在 .pyc 文件中的路径,这些路径可能是创建您安装的 Python 发行版的原因,不一定反映您自己的文件系统。
  • 没关系,它是 3.6.3。
  • 我认为这是 IDLE 调试器和引导模块锁定代码之间的不良交互。创建了一个空的_ModuleLock 实例,并在该实例上调用__init__。但是name 属性是在第 61 行设置的,所以 before 指向任何可能触发尝试查看该属性的尝试从不同的线程 可能会以那个例外。为什么还有另一个线程试图加载属性name 尚不清楚。

标签: python-3.x debugging import attributeerror


【解决方案1】:

我在导入 caffe 时遇到了这个问题,并且遇到了同样的错误。事实证明,python 在运行时没有在正确的位置调用 caffe 库。所以我手动有 sys.path.append("right_path"),在那里填写你的包的安装位置。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 2023-03-22
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2014-04-03
    相关资源
    最近更新 更多