使用pyFirmata报错:AttributeError: module 'inspect' has no attribute 'getargspec'
pyFirmata初始化报错:AttributeError: 'inspect'模块无'getargspec'属性
问题详情
运行最基础的pyFirmata代码也无法正常初始化Arduino,代码如下:
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 3.10及以上版本已移除inspect.getargspec()方法(该方法在Python 3.0就被标记为弃用),而当前使用的pyFirmata版本仍在调用这个已淘汰的API,导致报错。
解决方案
方案1:升级到维护版pyfirmata2
原版pyFirmata已长时间未更新,推荐使用兼容Python 3.10+的维护分支pyfirmata2:
- 安装pyfirmata2:
pip install --upgrade pyfirmata2
- 修改代码中的导入语句:
from pyfirmata2 import Arduino, util import time port = 'COM5' board = Arduino(port)
方案2:手动修改pyFirmata源码
如果不想更换库,可直接修改报错的源码:
- 找到报错的
pyfirmata.py文件(路径见报错信息:C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py) - 定位到
add_cmd_handler方法中的这一行:
len_args = len(inspect.getargspec(func)[0])
- 将其替换为:
len_args = len(list(inspect.signature(func).parameters.keys()))
- 保存文件后重新运行代码即可。
内容的提问来源于stack exchange,提问作者clueless
相关产品推荐
相关产品推荐

