cx_Oracle и обработка исключений - хорошие практики?

Я пытаюсь использовать 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 () . Однако я слышал, что подобная обработка исключений для управления потоком - плохая практика. Мысли?

24
задан Ben 24 March 2012 в 16:24
поделиться