Tôi đang tìm để đóng gói logic cho giao dịch cơ sở dữ liệu thành một khối with
; gói mã trong một giao dịch và xử lý các ngoại lệ khác nhau (các vấn đề về khóa). Điều này là đơn giản, đủ, tuy nhiên tôi muốn cũng có khối đóng gói việc thử lại của khối mã sau một số trường hợp ngoại lệ. Tôi không thể nhìn thấy một cách để gói này lên gọn gàng vào trình quản lý ngữ cảnh.Encapsulating lần thử lại vào 'khối with`
Có thể lặp lại mã trong tuyên bố with
không?
Tôi muốn sử dụng nó một cách đơn giản như thế này, đó là thực sự gọn gàng.
def do_work():
...
# This is ideal!
with transaction(retries=3):
# Atomic DB statements
...
...
tôi đang xử lý này với một trang trí, nhưng tôi muốn cung cấp cho người quản lý ngữ cảnh (hoặc trên thực tế cả hai), vì vậy tôi có thể chọn để bọc một vài dòng mã trong khối with
thay của một hàm nội tuyến được bọc trong một trang trí, đó là những gì tôi làm ở thời điểm hiện tại:
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 có vẻ như nó có ví dụ về cách triển khai trình quản lý ngữ cảnh. – Vlad