在Meraki的Python API调用中添加错误处理

jgovgodb  于 2023-04-28  发布在  Python
关注(0)|答案(1)|浏览(121)

我有这个脚本来使用meraki python模块进行API调用来查询Meraki设备。
我尝试在代码中添加一些错误处理,以便如果API调用返回错误代码,它将执行其他操作。我不知道该怎么办。
下面是我的简单代码,只查询一个设备:

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))

当我运行脚本时,它将返回“200 OK”或“404 Not Found”
终端窗口响应:

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''

此脚本的目的是检查序列号是否已分配给用户/网络。如果它是可用的,我会得到一个“404未找到”,如果它已经被分配给某人,我会得到一个“404未找到”。
如何检测和处理404案例?

mo49yndu

mo49yndu1#

我假设您使用的是meraki包,其源代码位于https://github.com/meraki/dashboard-api-python/tree/main/meraki
根据这一点,如果出现404响应,getDevice应该引发APIError异常。它包含statusreasonmessage属性中错误的详细信息(请参阅https://github.com/meraki/dashboard-api-python/blob/main/meraki/exceptions.py)-日志输出显示了包含这些属性的APIError.__repr__的结果。
您可以使用try/except语句来处理它:

from meraki import APIError

# ...

try:
    response = dashboard.devices.getDevice(serial)
except APIError as e:
    print(e.status)
    print(e.reason)
    print(e.message)

如果你需要专门处理404的情况,你可以使用if语句:

if e.status == 404:
        # ...

相关问题