为Meraki Python API调用添加404错误处理方案咨询
Meraki API设备查询脚本的错误处理方案
问题背景
我编写了一段使用Meraki Python模块调用API查询设备的脚本,现在需要为它添加错误处理逻辑,在API返回错误码时执行对应操作。当前脚本无法处理404这类错误,而且发现不管设备是可用还是已分配状态,API都会返回"404 Not Found"状态码,需要解决404的检测与处理问题。
原始脚本代码
import meraki import requests API_KEY = 'API_KEY' dashboard = meraki.DashboardAPI(API_KEY) serial = input("What is the serial number?") print(f"{serial}") response = (dashboard.devices.getDevice(serial))
运行终端示例
成功时输出:
C:\Scripts\Meraki\dev> python .\getdevice.py What is the serial number? XXXX-XXXX-XXXX 2023-04-26 18:32:52 meraki: INFO > GET https://api.meraki.com/api/v1/devices/XXXX-XXXX-XXXX 2023-04-26 18:32:53 meraki: INFO > devices, getDevice - 200 OK
失败时输出:
2023-04-26 18:41:09 meraki: INFO > GET https://api.meraki.com/api/v1/devices/XXXX-XXXX-XXXX 2023-04-26 18:41:10 meraki: ERROR > devices, getDevice - 404 Not Found, b''
解决方案
1. 添加错误处理逻辑
Meraki Python SDK会在API请求失败时抛出meraki.APIError异常,我们可以通过try-except块捕获该异常,再根据返回的状态码执行对应操作:
修改后的脚本:
import meraki API_KEY = 'API_KEY' # 可关闭默认控制台日志以减少冗余输出,按需开启 dashboard = meraki.DashboardAPI(API_KEY, print_console=False) serial = input("What is the serial number? ").strip() print(f"查询序列号: {serial}") try: response = dashboard.devices.getDevice(serial) print(f"查询成功!设备信息:\n{response}") except meraki.APIError as e: if e.status == 404: print(f"错误: 序列号 {serial} 未找到(404)") # 此处可添加404时的自定义操作,比如记录日志、提示用户核对信息等 else: print(f"API请求出错,状态码: {e.status},错误信息: {e.message}")
2. 关于"无论设备状态都返回404"的说明
出现这种情况通常有以下几种原因:
- 当前API密钥对应的组织无权限访问该设备(设备属于其他Meraki组织)
- 设备尚未被任何Meraki网络认领激活
- 输入的序列号存在拼写错误
可先核对序列号是否正确,或通过Meraki Dashboard手动搜索该序列号,确认其归属与激活状态。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

