If you have a look at the snowflake.connector.errors file you can see a list of all errors that can be returned by the snowflake connector. It doesn't say anywhere about the specific errors that can be returned by snowflake.connector.connect. Here is a list of the error types that I suspect can get returned:
class InterfaceError(Error)
class DatabaseError(Error)
class InternalError(DatabaseError)
class OperationalError(DatabaseError)
class InternalServerError(Error)
class ServiceUnavailableError(Error)
class GatewayTimeoutError(Error)
class ForbiddenError(Error)
class RequestTimeoutError(Error)
class BadRequest(Error)
class BadGatewayError(Error)
class MethodNotAllowed(Error)
class OtherHTTPRetryableError(Error)
class MissingDependencyError(Error)
Rather than trying to handle every error, you should only handle the errors that you know what to do with. For example, you wouldn't handle an InternalServerError unless you knew what to do to fix it. Instead, log it and let it fail.
Here is an example of how you would catch a bad username/password. You could then ask the user to re-enter their details:
import os
import snowflake.connector
from snowflake.connector.errors import DatabaseError, ProgrammingError
snowflake_account = os.environ['SNOWFLAKE_ACCOUNT']
if __name__ == '__main__':
try:
con = snowflake.connector.connect(
user='bad username', # <-------- Bad user
password='bad password', # <-------- Bad pass
account=snowflake_account # <-------- This is correct
)
except DatabaseError as db_ex:
if db_ex.errno == 250001:
print(f"Invalid username/password, please re-enter username and password...")
# code for user to re-enter username & pass
else:
raise
except Exception as ex:
# Log this
print(f"Some error you don't know how to handle {ex}")
raise
else:
try:
results = con.cursor().execute("select * from db.schema.table").fetchall()
print(results)
except ProgrammingError as db_ex:
print(f"Programming error: {db_ex}")
raise
finally:
con.close()
I've also put in an example of catching a ProgrammingError which can be raised when you enter some invalid SQL.