我正在尝试使用皮尔玛塔,但我无法让它工作。即使是最基本的库也不起作用。我猜库代码有问题。
from pyfirmata import Arduino,util
import time
port = 'COM5'
board = Arduino(port)
我收到此错误:
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'?
正如另一个答案中已经指出的,皮尔玛塔目前记录的模块可在 Python 2.7、3.6 和 3.7 上运行。这并不意味着它不能在其他版本上运行,但可能是作者尚未在其他版本上进行测试并且不受官方支持。因此它可能适用于较新的 Python 版本,也可能不适用于。
您的错误消息是由于缺少功能引起的inspect.getargspec()
。该函数是 Python 标准库的一部分,但自 Python 3.0(2008 年发布)以来已被弃用。不幸的是,作者没有意识到这一点,或者根本没有费心去修复它,所以现在代码不再适用于最新版本的 Python。
在Python文档中,您可以看到该函数仍然可用3.10版本,但不在3.11版本.
要解决这个问题,您有多种选择:
- 降级到Python 3.10,目前仍然是一个不错的选择(Python 3.10“有效”到2026年10月4日)。我不知道所有其他功能是否都有效。我想会的,但你必须自己找出答案。
- 降级到Python 3.7,据称支持。鉴于 Python 3.7 仍然存在(直到 2023 年 6 月 27 日),这也是一个合理的选择。
- 为 pyFirmata 模块创建一个问题并希望作者能够解决该问题。注意2019 年有人已经创建了一个问题但显然没有效果。您可以在那里发表评论,确认这现在已经真正破裂。
- 克隆库并自行修复(并创建拉取请求以将其放入官方库中)。
- 找到另一个与 Python 3.11 兼容的类似库。
- 自己写代码。
降级到 3.7 到 3.10 之间的 Python 版本无疑是最简单的选择,向作者留下一些反馈将使您有机会在将来修复该问题,以防您计划更长时间地使用脚本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)