看一段代碼:
move = [None, 20, 5, True, "a"]
valnum = 0
for val in move:
try:
if val >= 15:
val -= 3
move[valnum] = val
finally:
valnum = 1
print(move)
運行時,它給出了這個錯誤:
TypeError: '>=' not supported between instances of 'NoneType' and 'int'
finally 陳述句的重點不是避免這樣的錯誤嗎?
編輯:謝謝你的幫助。我認為我的問題不夠清楚。根據您的建議,我將其編碼為:
move = [None, 20, 5, True, "a", 19]
valnum = 0
for val in move:
try:
if val >= 15:
val -= 3
move[valnum] = val
except TypeError:
valnum = 1
print(move)
現在輸出變為:
[None, 17, 16, True, 'a', 19]
很容易看出出了什么問題。例外塊僅在出現錯誤時運行,但無論是否出現錯誤,我都需要該塊運行。是否有解決方案,而不僅僅是:
move = [None, 20, 5, True, "a", 19]
valnum = 0
for val in move:
try:
if val >= 15:
val -= 3
move[valnum] = val
except TypeError:
valnum = 1
continue
valnum = 1
print(move)
uj5u.com熱心網友回復:
不它不是。
無論是否有例外,它都可以確保始終執行某些操作。它不會捕獲例外,因為您需要一個except塊。
例如:
for val in move:
try:
if val >= 15:
val -= 3
move[valnum] = val
except TypeError:
valnum = 1
finally塊對于諸如資源清理、關閉檔案之類的事情很有用。
根據 Big Bird 的評論,以下是運行代碼并忽略錯誤的方式:
for val in move:
try:
if val >= 15:
val -= 3
move[valnum] = val
except TypeError:
pass # catch the error and ignore it
valnum = 1
再次編輯,我現在才意識到你想做什么,因為我太專注于你是如何嘗試做的。我建議根本不關心valnum,而是這樣做:
move = [None, 20, 5, True, "a", 19]
for index, val in enumerate(move):
try:
if val >= 15:
val -= 3
move[index] = val
except TypeError:
pass
print(move)
uj5u.com熱心網友回復:
您要使用的是“除外”來處理它。您的代碼應如下所示:
move = [None, 20, 5, True, "a"]
valnum = 0
for val in move:
try:
if val >= 15:
val -= 3
move[valnum] = val
except TypeError:
valnum = 1
print(move)
當你使用finally時,表示里面的代碼finally會在 try 條件之后作為清理動作運行。您可以查看檔案以獲取有關該finally操作的更多資訊:https ://docs.python.org/3/tutorial/errors.html#defining-clean-up-actions
查看您的代碼和使用,您可以簡單地
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424917.html
標籤:Python python-3.x 功能 调试 错误处理
