Search code examples
python-3.xsmartsheet-api

How to catch errors (Smartsheet API Python SDK)


I am missing fundamental knowledge. How to 'properly' catch errors returned by the API.

I'm using Python 3.+

If I pass in the wrong sheet ID

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

I get this response (in the IPython console)

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

and while it returns an error response, it isn't an exception according to try/except.

At this point, I would like to exit out of the loop I am in, instead of continuing on until I get to other lines of code like this

        for col in update_sht.columns:

that DO give errors that cause the program to fail.

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'

I'm doing more than one thing on the sheet, if I find it, and would prefer not to have a try/except around error line of code (I exaggerate) unless I need them for other errors.

I know/hope this is easier than I have been trying to make it, but as I opened with, I am missing something fundamental.

-Craig

---- UPDATE ---- I am going around in circles.

If errors_as_exceptions is true, then this

update_sht = SmSh.Sheets.get_sheet(dd_id)

raises and exception, but

print(update_sht)

or anything similar shows the previous good value in the object. How do I determine the status code and error codes so I can take appropriate action? Nothing I have tried has worked.

If errors_as_exceptions is false, then this

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

gives me the error code, but only when there is an error ... so I need to catch the error that occurs when there is no error.

If I raise the error (errors_as_exceptions=True), how do I determine the status code and error code and if I don't raise the error, how do I do the same? I want to prevent my code from failing and give the user useful information on what needs to be fixed.


Solution

  • If you set ss.errors_as_exceptions() and your code looks something like this

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

    The result will look something like this 1006: Not Found. So, the exception message appears to be errorCode:message.