我正在尋求將數據庫事務的邏輯封裝到with
塊中;將代碼封裝在事務中並處理各種異常(鎖定問題)。這很簡單,但是我想讓塊在某些例外之後封裝代碼塊的重試。我看不出一種方式將其整齊地打包到上下文管理器中。將重試封裝爲`with`塊
是否可以在with
語句中重複代碼?
我想使用它,就像這樣,這真的很乾淨。
def do_work():
...
# This is ideal!
with transaction(retries=3):
# Atomic DB statements
...
...
我目前正在與一個裝飾處理這一點,但我更願意提供上下文管理器(或實際上兩者都有),所以我可以選擇包裹的幾行代碼在with
塊代替內聯函數包裹在一個裝飾,這是我目前做的:
def do_work():
...
# This is not ideal!
@transaction(retries=3)
def _perform_in_transaction():
# Atomic DB statements
...
_perform_in_transaction()
...
http://docs.python.org/release/2.5/whatsnew/pep-343.html看起來像它有如何實現上下文管理器的例子。 – Vlad