1
我有一些Python代碼如下:如何停止try/for循環的代碼執行/ pythonic方式除外?
for emailCredentials in emailCredentialsList:
try:
if not emailCredentials.valid:
emailCredentials.refresh()
except EmailCredentialRefreshError as e:
emailCredentials.active = False
emailCredentials.save()
# HERE I WANT TO STOP THIS ITERATION OF THE FOR LOOP
# SO THAT THE CODE BELOW THIS DOESN'T RUN ANYMORE. BUT HOW?
# a lot more code here that scrapes the email box for interesting information
正如我在代碼中已經評論,如果EmailCredentialRefreshError
被拋出我想for循環的這個迭代停止,並移動到下一個項目中emailCredentialsList
。我不能使用break
,因爲這會停止整個循環,並且不會覆蓋循環中的其他項目。當然,我可以將所有代碼包裝在try/except中,但我想將它們緊密放在一起,以便代碼保持可讀性。
解決此問題的最Pythonic方法是什麼?
這當然會起作用;但是你是否有引用(例如PEP),這是Pythonic的方式? – mfrankli
@mfrankli好,唯一的另一種方法是將整個循環體的其餘部分移動到'try'的'else'塊中,[*「flat比嵌套的」*「更好(https:// www。 python.org/dev/peps/pep-0020/),更不用說(正如OP指出的那樣),這使得理解控制流程變得更加困難,因爲「繼續」與「for」距離很遠。 – jonrsharpe
'break'和'continue'是有效的語句,它是pythonic。但是正如@jonrsharpe所提到的那樣,您可以在異常時調用'raise'並處理else塊中的*非常規部分*。這完全是關於味道和口味 – FallenAngel