Как отлавливать ошибки (Smartsheet API Python SDK) - PullRequest
0 голосов
/ 28 июня 2018

Мне не хватает фундаментальных знаний. Как «правильно» отлавливать ошибки, возвращаемые 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), как мне определить код состояния и код ошибки, и если я не поднимаю ошибку, как мне сделать то же самое? Я хочу предотвратить сбой моего кода и предоставить пользователю полезную информацию о том, что необходимо исправить.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Если вы установите 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.

0 голосов
/ 28 июня 2018

Если вы хотите, чтобы Python SDK вызывал исключения для ошибок API, вызовите метод errors_as_exceptions на клиентском объекте, например,

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