Đố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 finallykhối sẽ luôn được thực thi không?
Ví dụ: giả sử tôi trở lại trong khi ở trong một exceptkhố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 finallykhối có thể không thực thi trong Python không?
finallysẽ không chạy. Hoặc tương tự nếu máy tính gặp sự cố trước: D
finallysẽ không thực hiện nếu dây nguồn bị rách khỏi tường.
finallykhô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.exithoặc một sự gián đoạn bắt buộc. Các tài liệu nói rằngfinallyluôn luôn được thực thi, vì vậy tôi đi với điều đó.