【问题标题】:Python IDLE, importing XLRD, error generated in debug mode: AttributeError: '_ModuleLock' object has no attribute 'name'Python IDLE,导入 XLRD,在调试模式下产生错误:AttributeError: '_ModuleLock' object has no attribute 'name'
【发布时间】:2020-04-19 20:10:18
【问题描述】:

我是 Python 新手,这是我第一次尝试调试模式。

我已经阅读了 stackoverflow 上几乎类似问题的答案,但似乎都没有解决这种情况:

当我在调试模式(IDLE,Windows 10)下运行此代码时:

import xlrd

print('Hello World!')

并在print('Hello World") 上设置断点并尝试单步执行代码,我得到以下错误行:

    > **Traceback (most recent call last):   File "D:/data/python/hello_world.py", line 4, in <module>
    >     import xlrd   File "<frozen importlib._bootstrap>", line 988, 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:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\bdb.py",
    > line 88, in trace_dispatch
    >     return self.dispatch_line(frame)   File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\bdb.py",
    > line 112, in dispatch_line
    >     self.user_line(frame)   File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python38-32\lib\idlelib\debugger.py",
    > line 24, in user_line
    >     self.gui.interaction(message, frame) AttributeError: '_ModuleLock' object has no attribute 'name'**

该错误仅在调试模式下发生。 当我替换其他模块时,例如pprint, datetime, sys,在调试模式下没有产生错误,所以我只能假设是 xlrd 模块产生了错误。

为什么我使用像 xlrd 这样的旧模块而不是 openpxl?因为我正在使用由最新版本的 LibreOffice Calc 创建的电子表格,Python 立即通知我必须使用 xlrd 并且不会再继续了。

【问题讨论】:

    标签: python debugging module python-idle xlrd


    【解决方案1】:

    我以为我有答案,但显然没有。我将 openpyxl 而不是 xlrd 导入到 hello world 代码中。与同一行上的断点相同的错误。我本来想说“回到绘图板上”,但我想我会做些别的事情。非常令人失望!

    【讨论】:

      【解决方案2】:

      这可能是this question 的副本,但我还没有在那里回答。这似乎也是这个两年前的tracker issue. 的副本。我最近找到了我认为是答案但还没有写补丁的东西。需要一个简单的改变来改善这种情况,在 4/22 和 4/23 的最后 3 条消息中进行了讨论。在 /Lib/idlelib/debugger_r.py 中,第 173 行,在 dict_item 中,更改

          value = repr(value)
      

          value = reprlib.repr(value)
      

      并在顶部添加

      import reprlib
      

      2021 年 1 月 10 日编辑:更改已应用于 https://bugs.python.org/issue33065,并将在 3.8、3.9 和 3.10 的下一个版本中。

      【讨论】:

        猜你喜欢
        • 2014-12-20
        • 1970-01-01
        • 2021-11-08
        • 2021-04-10
        • 1970-01-01
        • 2021-09-16
        • 2022-12-01
        • 2022-12-03
        • 1970-01-01
        相关资源
        最近更新 更多