2013-12-10 47 views
0
if os.path.exists(temp_dir): 
    print "Deleting ", temp_dir 
    try: 
     shutil.rmtree(temp_dir) 
    except: 
     raise 
print "Delete complete" 

它打印「刪除C:\ TEMP \元軟件包」,但沒有打印任何錯誤,也不是「完全刪除」,顯然rmtree失敗了,但希望它打印的錯誤是什麼是,會「提出」打印錯誤是或不是?提前致謝!蟒蛇shutil.rmtree打印錯誤,如果任何

+0

'try:'/'except:raise'什麼都不做(除了讓你的代碼更加冗長和稍慢)。你在說:「如果有任何例外,而不是提高它,讓我來處理它......通過提高它的方式來提高它。」那麼......你在那裏做什麼? – abarnert

回答

2

會「打」打印錯誤是或不是?

不,全部raise確實會重新引發異常,就像您沒有抓到它一樣。特別是,這種代碼:

try: 
    shutil.rmtree(temp_dir) 
except: 
    raise 

...是保證做同樣的事情(除了稍微慢一點,少了很多可讀)爲:

shutil.rmtree(temp_dir) 

如果異常,最終傳播到頂層沒有在任何地方處理,Python將打印回溯並退出。但是如果其他代碼處理鏈中任何地方的異常,它可以做任何想要的事情。

如果您想要打印異常,則必須明確地執行此操作。例如:

try: 
    shutil.rmtree(temp_dir) 
except Exception as e: 
    print(e) 
    raise 

如果您想了解更多信息比print(e)print(repr(e))給你,看到traceback庫,它有一些檢索或傾倒​​有關異常和追溯信息的各種功能。特別是要得到,如果這件事發生在頂層,你會得到相同的輸出,這樣做:

try: 
    shutil.rmtree(temp_dir) 
except Exception as e: 
    traceback.print_exc() 
    raise 

因爲print_exc直接獲取異常對象和其他信息了Python的膽量,你真的不這裏需要except Exception as e:;你可以使用except Exception:except: