On python2.6
tôi đoán, bạn đang mong đợi các khối finally để được gắn với khối "thử", nơi bạn nâng cao ngoại lệ "B". Khối cuối cùng được gắn vào khối "thử" đầu tiên.
Nếu bạn thêm một ngoại trừ khối trong khối try bên trong, sau đó các khối finally sẽ nâng cao ngoại lệ B.
try:
raise Exception("a")
except:
try:
raise Exception("b")
except:
pass
finally:
raise
Output:
Traceback (most recent call last):
File "test.py", line 5, in <module>
raise Exception("b")
Exception: b
Một biến thể giải thích whats xảy ra ở đây
try:
raise Exception("a")
except:
try:
raise Exception("b")
except:
raise
Đầu ra:
Traceback (most recent call last):
File "test.py", line 7, in <module>
raise Exception("b")
Exception: b
Nếu bạn thấy ở đây, thay thế cho khối finally với ngoại trừ không nâng cao ngoại lệ B.
Python 3.1 tăng cả hai. – kennytm
Ah. Tôi cần phải đề cập đến tôi trên Python 2.6. – wilhelmtell
Chỉ cần tò mò: Trình biên dịch C# trên cùng một kết hợp cho biết: "Lỗi: Lệnh ném không có đối số không được cho phép trong mệnh đề cuối cùng được lồng trong mệnh đề khai thác gần nhất" (throw == raise, catch == except). Không mơ hồ! – Andrey