我缺少基本的知识。如何“正确”捕获API返回的错误。
我使用的是Python 3.+
如果我传入了错误的工作表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}}
虽然它返回一个错误响应,但根据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'
我在工作表上做了不止一件事,如果我找到了它,我不希望在错误代码行周围有try/except (我夸大了),除非我需要它们来处理其他错误。
我知道/希望这比我一直试图做到的要容易,但正如我开始时所说的那样,我遗漏了一些基本的东西。
-Craig
-更新-我在绕圈子。
如果errors_as_exceptions为真,则此
update_sht = SmSh.Sheets.get_sheet(dd_id)
提升和异常,但是
print(update_sht)
或者任何类似的东西都会显示对象中的前一个good值。如何确定状态代码和错误代码,以便采取适当的操作?我试过的都不管用。
如果errors_as_exceptions为false,则此
update_sht = SmSh.Sheets.get_sheet(dd_id)
print(update_sht.result.code)
给我错误代码,但只有在有错误的时候...因此,我需要捕获没有错误时发生的错误。
如果我引发错误(errors_as_exceptions=True),我如何确定状态代码和错误代码,如果我没有引发错误,我如何执行相同的操作?我想防止我的代码失败,并为用户提供关于需要修复的有用信息。
发布于 2018-06-29 05:26:59
如果您设置了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
。
发布于 2018-06-28 23:44:08
如果您希望Python SDK为API错误引发异常,请在客户端对象上调用errors_as_exceptions方法,例如
ss = smartsheet.Smartsheet()
ss.errors_as_exceptions()
https://stackoverflow.com/questions/51078622
复制相似问题