Мне не хватает фундаментальных знаний.
Как «правильно» отлавливать ошибки, возвращаемые API.
Я использую Python 3. +
Если я введу неправильный идентификатор листа
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}}
и, хотя он возвращает ответ об ошибке, он не является исключением в соответствии с попыткой / исключением.
В этот момент я хотел бы выйти из цикла, в котором я нахожусь, вместо продолжения, пока не доберусь до других строк кода, подобных этому
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'
Я делаю больше, чем одну вещь на листе, если я ее найду, и предпочел бы не пытаться / исключать строку ошибки (я преувеличиваю), если только они не нужны мне для других ошибок.
Я знаю / надеюсь, что это проще, чем я пытался это сделать, но, как я начал, я упускаю что-то фундаментальное.
-Craig
---- ОБНОВЛЕНИЕ ----
Я хожу по кругу.
Если errors_as_exceptions - true, тогда это
update_sht = SmSh.Sheets.get_sheet(dd_id)
повышает и исключение, но
print(update_sht)
или что-либо подобное показывает предыдущее хорошее значение в объекте.
Как определить код состояния и коды ошибок, чтобы я мог предпринять соответствующие действия?
Ничто из того, что я пробовал, не сработало.
Если errors_as_exceptions равно false, то это
update_sht = SmSh.Sheets.get_sheet(dd_id)
print(update_sht.result.code)
дает мне код ошибки, но только когда есть ошибка ... поэтому мне нужно отловить ошибку, которая возникает, когда нет
ошибка.
Если я поднимаю ошибку (errors_as_exceptions = True), как мне определить код состояния и код ошибки, и если я не поднимаю ошибку,
как мне сделать то же самое?
Я хочу предотвратить сбой моего кода и предоставить пользователю полезную информацию о том, что необходимо исправить.