2011-12-20 24 views
13

Tại sao ngoại lệ trong foo whiz bằng cách không được chú ý, nhưng ngoại lệ trong bar được nêu ra?python try-finally

def foo(): 
    try: 
     raise Exception('foo') 
    finally: 
     return 

def bar(): 
    try: 
     raise Exception('bar') 
    finally: 
     pass 

foo() 
bar() 
+5

trùng lặp [ngoại lệ trả lại hàng] (http://stackoverflow.com/questions/517060/return-eats-exception) – gecco

Trả lời

19

Từ Python documentation:

Nếu mệnh đề cuối cùng đặt ra ngoại lệ khác hoặc thực hiện một sự trở lại hoặc phá vỡ tuyên bố, ngoại trừ lưu sẽ bị mất.

+1

thú vị! nó đi đâu, nếu câu hỏi đó có ý nghĩa? – wim

+5

@wim: Nó đi bất cứ nơi nào biến địa phương đi vào cuối hàm, tôi giả sử. Một cách để xem xét nó là ngoại lệ được tái nâng lên ở cuối khối 'cuối cùng'. Vì 'return' bỏ qua phần còn lại của khối' finally', việc nâng cao lại ngoại lệ sẽ không bao giờ xảy ra. – interjay