Python - как не останавливать выполнение скрипта при ошибке?

На первой части скрипта при неуникальных данных в вставляемых элементах возникает ошибка останавливающая скрипт. Как сделать чтобы возникающая ошибка не останавливала выполнение скрипта, и скрипт выполнял дальнейшую работу? В моем понимании в случае ошибки 1го"try:", должен обрабатываться 2й"try:" но этого не происходит....

Ошибка: cur.execute(sql_update) psycopg2.errors.InFailedSqlTransaction: ОШИБКА: текущая транзакция прервана, команды до конца блока транзакции игнорируются

def table_update():
    conn = psycopg2.connect( dbname user host password)
    cur = conn.cursor()
    try:
        cur.execute("insert into us(A,B,C,D,F,G) "
                    "VALUES (%s,%s,%s,%s,%s,%s)", us_table)
    except: 
        print("Error")
        try:
            update = "UPDATE us set(A,B,C,D,F,G) = "
            where = " WHERE A = "
            sql_update = update + str(tuple(us_table)) + where + 
                "'" + us_table[0] + "'"
            cur.execute(sql_update)
        except KeyError as e2:
            print("Error", e2)
    conn.commit()
    cur.close()
    conn.close()

Ответы (1 шт):

Автор решения: traderr

В каждом try нужны свои open/close конекшн. Print после первого except:тоже ставить нельзя он не позволят второй функции запуститься. Правильно будет так:

def table_update():
    try:
        conn = psycopg2.connect( dbname user host password)
        cur = conn.cursor()        
        cur.execute("insert into us(A,B,C,D,F,G) VALUES (%s,%s,%s,%s,%s,%s)", us_table)
        conn.commit()
        cur.close()
        conn.close()
        print("insert ok")
    except: 
        try:
            update = "UPDATE us set(A,B,C,D,F,G) = "
            where = " WHERE A = "
            sql_update = update + str(tuple(us_table)) + where + 
                "'" + us_table[0] + "'"
            cur.execute(sql_update)
            conn.commit()
            cur.close()
            conn.close()
            print("update ok")
        except KeyError as e:
            print("Error", e)
→ Ссылка