小例子:
x = ['idjs', 'w', '2331']
fin = []
for row in x:
try:
fin.append(row)
fin.append(row[1])
except:
continue
print(fin)
Output: ['idjs', 'd', 'w', '2331', '3']
在上述情況下,例外是在何時引發的row='w',fin.append(row[1])
是否有可能在 for 回圈中為組件引發例外的情況下,前面的多個行程也撤消了它們的操作?
回圈中可能有多個行程,這只是一個示例。有沒有辦法在不特別提及它們并洗掉組件的情況下處理所有內容?
預期輸出:['idjs', 'd', '2331', '3']
uj5u.com熱心網友回復:
也許使用list.extend而不是附加兩次:
x = ['idjs', 'w', '2331']
fin = []
for row in x:
try:
fin.extend([row, row[1]])
except:
continue
輸出:
['idjs', 'd', '2331', '3']
uj5u.com熱心網友回復:
在您給出的簡單示例中,enke 的使用建議extend是最簡單的
在更復雜的代碼中,聽起來你幾乎想要一個ExitStack;這將允許您注冊在退出背景關系時呼叫的清理,這可能是內置的(例如關閉檔案,釋放鎖)或自定義(呼叫函式,有或沒有關于例外的資訊)
手冊中的一個稍微簡化的示例:
files = []
with ExitStack() as stack:
for fname in filenames:
files.append(stack.enter_context(open(fname)))
這將打開所有檔案,但如果其中任何一個無法打開(未找到),所有已經打開的檔案將被自動關閉。
您還可以注冊要在清理程序中呼叫的函式:
stack.callback(lambda: print("Exiting the stack"))
另一種選擇(或組合),取決于您在這 20 個步驟中所做的事情,您可以采取這些步驟并將它們放入自己的函式或類中,并使其成為背景關系管理器。這將讓您確保設定和清理始終以匹配的方式進行,而不會弄亂您的主代碼。
uj5u.com熱心網友回復:
x = ['.', 'w', '2331']
fin = []
for row in x:
B=fin.copy()
try:
fin.append(row)
fin.append(row[1])
except:
fin=B.copy()
解決方案是在每次迭代中創建串列的副本,如果引發例外,那么我們可以將先前復制的串列復制到原始串列中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451786.html
上一篇:檢查字串中指定位置的空格
