You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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:

  1. 安装pyfirmata2:
pip install --upgrade pyfirmata2
  1. 修改代码中的导入语句:
from pyfirmata2 import Arduino, util
import time

port = 'COM5'
board = Arduino(port)

方案2:手动修改pyFirmata源码

如果不想更换库,可直接修改报错的源码:

  1. 找到报错的pyfirmata.py文件(路径见报错信息:C:\Users\marce\AppData\Roaming\Python\Python311\site-packages\pyfirmata\pyfirmata.py)
  2. 定位到add_cmd_handler方法中的这一行:
len_args = len(inspect.getargspec(func)[0])
  1. 将其替换为:
len_args = len(list(inspect.signature(func).parameters.keys()))
  1. 保存文件后重新运行代码即可。

内容的提问来源于stack exchange,提问作者clueless

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:35:42