很多代码把所有逻辑都塞进try,出错后又用宽泛的except兜底,结果异常原因被掩盖,资源也没有及时释放。记住各自的分工,代码会清晰很多。
一、各自的职责
- try:只放可能出错的一小段代码。
-
- except:只处理预见得到、能够恢复的异常。
-
- else:try没有出错时才执行,放成功后的逻辑。
-
- finally:无论成功还是失败都会执行,只放清理工作。
二、正确搭配模式
成功时走try到else,失败时走except,清理工作交给finally:
python
def parse_number(text):
try:
value = int(text)
except ValueError:
print("不是整数")
return None
else:
print(value)
return value
finally:
print("结束")
print(parse_number("42"))
print(parse_number("abc"))
这样,成功和失败的分支互不干扰,结束提示总会打印。
三、常见误区
- try里放太多代码,出错后很难定位是哪一行。
-
- 用宽泛的except把异常吞掉,问题被藏起来。
-
- 在finally里写return,会覆盖返回值甚至掩盖异常。
-
- 把成功后的逻辑写在try末尾,而不是else里。
四、实用示例:读文件一定记得关文件
python
with open("demo.txt", "w", encoding="utf-8") as f:
f.write("hello\n")
f = open("demo.txt", encoding="utf-8")
try:
print(f.readline().strip())
finally:
f.close()
print("文件已关闭")
记住一句话:try负责尝试,except负责兜底,else负责成功后的事,finally负责清理。