clu*_*ess 5 python arduino attributeerror pyfirmata python-3.11
我正在尝试使用pyFirmata,但无法让它工作。即使是最基本的库也不起作用。我猜库代码有问题。
from pyfirmata import Arduino,util
import time
port = 'COM5'
board = Arduino(port)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Traceback (most recent call last):
File "c:\Users\Public\pythonpublic\arduino.py", line 5, in <module>
board = Arduino(port)
^^^^^^^^^^^^^
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\__init__.py", line 19, in __init__
super(Arduino, self).__init__(*args, **kwargs)
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py", line 101, in __init__
self.setup_layout(layout)
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py", line 157, in setup_layout
self._set_default_handlers()
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py", line 161, in _set_default_handlers
self.add_cmd_handler(ANALOG_MESSAGE, self._handle_analog_message)
File "C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py", line 185, in add_cmd_handler
len_args = len(inspect.getargspec(func)[0])
^^^^^^^^^^^^^^^^^^
AttributeError: module 'inspect' has no attribute 'getargspec'. Did you mean: 'getargs'?
Run Code Online (Sandbox Code Playgroud)
正如另一个答案中已经指出的那样,pyFirmata模块目前已记录在 Python 2.7、3.6 和 3.7 上运行。这并不意味着它不能在其他版本上运行,但可能是作者尚未在其他版本上进行测试并且不受官方支持。因此它可能适用于较新的 Python 版本,也可能不适用于。
\n该错误消息是由缺少功能引起的inspect.getargspec()。该函数是 Python 标准库的一部分,但自 Python 3.0(2008 年发布)以来已被弃用。不幸的是,作者没有意识到这一点,或者只是懒得修复它,所以现在代码不再适用于最新版本的 Python。
在Python文档中,您可以看到该函数在版本3.10中仍然可用,但在版本3.11中不再可用。
\n要解决这个问题,您有多种选择:
\n降级到Python 3.10,目前仍然是一个不错的选择(Python 3.10“有效”到2026年10月4日)。我不知道所有其他功能是否都有效。我想会的,但你必须自己找出答案。
\n降级到Python 3.7,据称支持。鉴于 Python 3.7 仍然存在(直到 2023 年 6 月 27 日),这也是一个合理的选择。请注意,Python 3.7 已结束生命。
为 pyFirmata 模块创建一个问题并希望作者能够解决该问题。请注意,2019 年有人已经创建了一个问题,但显然没有效果。您可以在那里发表评论,确认这现在已经真正破裂(我也已经这样做了)。2022 年,另一位用户再次报告了该问题。
\n克隆库并自行修复它(并创建一个 Pull 请求以将其放入官方库中)。\n更新:这已经完成 \xe2\x80\x94 PR #122修复了此问题并于 2022 年 9 月合并到 master不幸的是,没有发布新的 pip 版本,因此您必须检查源代码而不是安装来使用pip它。
找到另一个与 Python 3.11 兼容的类似库。例如,pyfirmata2是 pyFirmata 的更新版本,在撰写本文时(2023 年 11 月)正在积极支持该版本,并且不存在此问题。
\n自己写代码。
\n降级到 3.7 到 3.10 之间的 Python 版本无疑是最简单的选择,并且(一般来说)向作者留下一些反馈将使您有机会在将来修复该问题,以防您计划使用您的脚本更长时间。
\n它运行在 Python 2.7、3.6 和 3.7 上
您正在使用Python 3.11。自 Python 3.7 以来(核心库模块inspect)已发生变化。
| 归档时间: |
|
| 查看次数: |
20174 次 |
| 最近记录: |