6

我试图在下面的函数中使用 finally,但是,Python 报告了一个语法错误。我确定我在做一些愚蠢的事情,但我似乎无法发现它......

片段如下:

# Store ids with key
# Returns GUID (used to clear table after words)
def storeIdsInTemporaryTable(dbinfo, id_list):
    conn = dbinfo['db_connection']

    guid = genutils.getGUID()
    orig_tableinfo = dbinfo['table']
    orig_datarows = dbinfo['datarows']

    metadata = dbinfo['metadata']

    sql = "INSERT INTO temporary_data_key (key) VALUES ({0}) RETURNING id".format(guid)
    key_id = executeSQLonDbConnection(dbinfo, sql, return_field='id')

    tableinfo = Table('temporary_data', metadata, autoload=True)
    datarows = []

    for id_value in id_list:
        datarows.append( { 'key_id': key_id, 'id_value': id_value} )

    try:
        insertToDb(dbinfo)
    except:
        guid = None # to indicate an error occured
        if key_id:
            conn.execute("DELETE FROM temporary_data_key WHERE key={0}".format(guid)

    finally:
        dbinfo['table'] = orig_tableinfo
        dbinfo['datarows'] = orig_datarows

    return guid

是什么导致语法错误?

顺便说一句,我知道我需要将两个插入包装在一个事务中,但由于某种原因,我无法让事务工作(SQLALchemy 引发与事务相关的错误) - 所以下次再问另一个问题..

[[编辑]]

异常错误(现已修复)是​​:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/path/to/script.py", line 1632
    finally:
          ^
SyntaxError: invalid syntax
4

2 回答 2

16

您使用的是 < 2.5 的 Python 吗?try except finally 仅在 2.5 中添加,并且在您必须将 try except 包装在 try finally 中之前。

于 2012-06-08T09:38:53.557 回答
7

您在调用 . 时缺少右括号execute()。它应该是:

conn.execute("DELETE FROM temporary_data_key WHERE key={0}".format(guid))

代替:

conn.execute("DELETE FROM temporary_data_key WHERE key={0}".format(guid)
于 2012-06-08T09:37:05.677 回答