Запускайте операторы только тогда, когда все операторы try были успешными в Python - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь сделать что-то вроде этого:

try:
  database_insert_1()  # insert sth to table_1
  database_insert_2()  # insert sth to table_2
except Exception as e:
  print(e.message)

Я ожидаю, что database_insert_1 и database_insert_2 будут выполняться только тогда, когда они оба могут быть успешно запущены.

То, как я это делаю выше, будет проблемой в том, что database_insert_1 все равно будет успешно выполнен в случае сбоя только database_insert_2.

Вариант использования: две таблицы используют одну и ту же схему, и я ожидаю, что две таблицы будут согласованными и не хотят обновлять только одну из них.

Как я могу решить вышеуказанную проблему? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Так, например, если вы используете базу данных sql, передайте курсор в вашу функцию и не фиксируйте внутри функции вставки

cursor = conn.cursor()
try:
    database_insert_1(cursor)  # insert sth to table_1
    database_insert_2(cursor)  # insert sth to table_2
    cursor.commit

except Exception as e:
    print(e.message) 

Так что, если у вас есть ошибка в любой из функций, тогдаон перейдет к исключению и не обновит ни одну из баз данных.

0 голосов
/ 06 июня 2019

Вы можете немного изменить свой код, и он будет работать, нужно сделать его более иерархичным:

try:
  try:
     database_insert_1()  # insert sth to table_1
     database_insert_2()  # insert sth to table_2
  except:
      pass
except Exception as e::  
print(e.message)
...