我正在嘗試編寫一個小的上下文管理器,它會嘗試重複執行一些代碼,直到代碼工作或者直到指定的嘗試次數完成爲止。我試圖寫這個,但遇到上下文管理器在處理問題時遇到困難:Python上下文管理器如何嘗試執行代碼?
Exception RuntimeError: 'generator ignored GeneratorExit'
我該如何編碼?
import contextlib
import random
def main():
with nolube():
print(1/random.randint(0, 1))
@contextlib.contextmanager
def nolube(
tries = None # None: try indefinitely
):
"""
Create a context for trying something repeatedly.
"""
tries_done = 0
rekt = True
if tries is None:
while rekt is True:
try:
yield
rekt = False
except:
tries_done += 1
pass
else:
while rekt is True and tries_done <= tries:
try:
yield
rekt = False
except:
tries_done += 1
pass
if __name__ == "__main__":
main()
'retrying'包尚未更新一段時間。但是有一個名爲[tenacity]的叉子(https://pypi.python.org/pypi/tenacity)正在維護中。 – TimB
@TimB:謝謝你的提醒,我已經編輯了推薦韌性的答案。 –