Đối với bất kỳ khối thử cuối cùng nào có thể có trong Python, có đảm bảo rằng finally
khối sẽ luôn được thực thi không?
Ví dụ: giả sử tôi trở lại trong khi ở trong một except
khối:
try:
1/0
except ZeroDivisionError:
return
finally:
print("Does this code run?")
Hoặc có thể tôi nâng lại Exception
:
try:
1/0
except ZeroDivisionError:
raise
finally:
print("What about this code?")
Thử nghiệm cho thấy điều finally
đó được thực hiện cho các ví dụ trên, nhưng tôi tưởng tượng có những kịch bản khác mà tôi chưa từng nghĩ tới.
Có kịch bản nào trong đó một finally
khối có thể không thực thi trong Python không?
finally
sẽ không chạy. Hoặc tương tự nếu máy tính gặp sự cố trước: D
finally
sẽ không thực hiện nếu dây nguồn bị rách khỏi tường.
finally
không thực hiện hoặc "đánh bại mục đích của nó" là trong một vòng lặp vô hạn,sys.exit
hoặc một sự gián đoạn bắt buộc. Các tài liệu nói rằngfinally
luôn luôn được thực thi, vì vậy tôi đi với điều đó.