我正在努力使我的 try/except 塊盡可能的小。然而,我不知道如何將其與可能很長的with塊相協調:
try。
with db.connect() as connection:
# 許多行與資料庫進行互動。
# 和更多的線。
# 還有更多的行。
except ConnectionError:
有什么方法可以將try/except寫得不那么長嗎?
我想我可以把大部分的代碼重新組織到一個單獨的函式中:
我想我可以把大部分的代碼重新組織到一個單獨的函式中:
try。
with db.connect() as connection:
do_stuff(connection)
except ConnectionError:
......但似乎應該有一種方法可以用更少的行來做。
uj5u.com熱心網友回復:
你實際上不必把with陳述句放在try陳述句中,如果db.connect是唯一可以引發ConnectionError的東西。如果有一個連接錯誤,就沒有連接可以關閉。
如果有一個連接錯誤,就沒有連接可以關閉。
try。
connection = db.connect()
except ConnectionError:
...
with connection:
...
db.connect的呼叫并不是with陳述句所關心的;而是對connection.__enter__和connection.__exit__的呼叫。
根據你對ConnectionError的做法,with陳述句可能應該被保護起來,以避免嘗試使用未定義的名稱connection。
如果你不喜歡在
connection被分配和with陳述句之間能夠對它做一些事情,你可以使用一個ExitStack來立即進入背景關系。例如,
from contextlib import ExitStack
with ExitStack() as es:
try:
connection = es.enter_context(db.connect() )
except ConnectionError:
...
# do stuff with the connection[/span
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/320034.html
標籤:
上一篇:.NET5遷移后的例外問題
下一篇:在一個方法中回圈瀏覽ObjectInputStream,在主方法中列印整個檔案,但遇到EOF不起作用或出錯的問題。
