如何捕获错误(Smartsheet API Python SDK)

How to catch errors (Smartsheet API Python SDK)

我缺少基础知识。 如何 'properly' 捕获 API.

返回的错误

我正在使用 Python 3.+

如果我传错sheet ID

        try:
            update_sht = SmSh.Sheets.get_sheet(dd_id)
            print("OK?:", update_sht, flush=True)
        except:
            print("Error Print:\n", update_sht)

我收到此响应(在 IPython 控制台中)

Response: {
status: 404 Not Found
content: {
{
    "errorCode": 1006,
    "message": "Not Found",
    "refId": "jod4cgoou0sw"
}
}
OK?: {"result": {"code": 1006, "errorCode": 1006, "message": "Not Found",
"name": "ApiError", "recommendation": "Do not retry without fixing the
problem. ", "refId": "jod4cgoou0sw", "shouldRetry": false, 
"statusCode": 404}}

虽然它 returns 是一个错误响应,但根据 try/except 这不是异常。

在这一点上,我想退出我所在的循环,而不是继续下去,直到我到达像这样的其他代码行

        for col in update_sht.columns:

确实会给出导致程序失败的错误。

Traceback (most recent call last):

  File "<ipython-input-195-85dde6ec7071>", line 1, in <module>
    xxx(debug=False)

  File "<ipython-input-194-0b889c817b08>", line 75, in xxx
    for col in update_sht.columns:

AttributeError: 'Error' object has no attribute 'columns'

如果我找到它,我在 sheet 上做了不止一件事,并且不希望在错误代码行周围有一个 try/except(我夸大了),除非我需要他们为其他错误。

我 know/hope 这比我一直试图做到的要容易,但是当我开始时,我遗漏了一些基本的东西。

-克雷格

----更新---- 我在兜圈子。

如果errors_as_exceptions为真,那么这个

update_sht = SmSh.Sheets.get_sheet(dd_id)

引发异常,但

print(update_sht)

或任何类似的东西显示了对象中以前的好值。 如何确定状态代码和错误代码以便采取适当的措施? 我试过的都没有用。

如果errors_as_exceptions为假,那么这个

update_sht = SmSh.Sheets.get_sheet(dd_id)
    print(update_sht.result.code)

给我错误代码,但是只有在有错误的时候才...所以我需要捕获没有错误时发生的错误 错误。

如果我提出错误 (errors_as_exceptions=True),我如何确定状态代码和错误代码,如果我不提出错误, 我该怎么做? 我想防止我的代码失败并为用户提供有关需要修复的内容的有用信息。

如果您希望 Python SDK 为 API 错误引发异常,请调用客户端对象上的 errors_as_exceptions 方法,例如

ss = smartsheet.Smartsheet()
ss.errors_as_exceptions()

如果你设置 ss.errors_as_exceptions() 并且你的代码看起来像这样

try:
    my_sheet = ss.Sheets.get_sheet(sheet_ID)
    print(my_sheet)
except Exception as e: 
    print(e.message)

结果看起来像这样 1006: Not Found。因此,异常消息似乎是 errorCode:message.