Я пытаюсь использовать cx_Oracle для подключения к экземпляру Oracle и выполнения некоторых операторов DDL:
db = None
try:
db = cx_Oracle.connect('username', 'password', 'hostname:port/SERVICENAME')
#print(db.version)
except cx_Oracle.DatabaseError as e:
error, = e.args
if error.code == 1017:
print('Please check your credentials.')
# sys.exit()?
else:
print('Database connection error: %s'.format(e))
cursor = db.cursor()
try:
cursor.execute(ddl_statements)
except cx_Oracle.DatabaseError as e:
error, = e.args
if error.code == 955:
print('Table already exists')
if error.code == 1031:
print("Insufficient privileges - are you sure you're using the owner account?")
print(error.code)
print(error.message)
print(error.context)
cursor.close()
db.commit()
db.close()
Однако я не совсем уверен, что здесь лучше всего подходит для обработки исключений.
Во-первых, я создаю объект db
внутри блока try, чтобы отловить любые ошибки соединения.
Однако, если он не может подключиться, то db
не будет существовать дальше, поэтому я установил выше db = None
. Однако является ли это хорошей практикой?
В идеале мне нужно отлавливать ошибки при подключении, затем ошибки при выполнении операторов DDL и т. Д.
Является ли вложение исключений хорошей идеей? Или есть лучший способ справиться с зависимыми / каскадными исключениями, подобными этому?
] Также есть некоторые части (например. грамм. сбои соединения), где я бы хотел, чтобы сценарий просто завершился - отсюда закомментированный вызов sys.exit ()
. Однако я слышал, что подобная обработка исключений для управления потоком - плохая практика. Мысли?