2014-10-27 20 views
0

我有一些像這樣的代碼:如何刪除文件中創建了一個聲明,如果有塊失敗(蟒蛇)

with open(output_path, 'w') as output_file: 
    #create and write output file 

在運行這一點,那麼即使是在某個地方出現錯誤,該文件已被創建並處於不完整狀態。

我想,如果在with-block中引發了一個異常(而沒有處理),那麼該文件就會被刪除。什麼是最好的方法來做到這一點?

我的理解是,如果我試圖用(嘗試...)finally語句來完成它,如果沒有異常,而如果我把它放在一個except語句後,異常將不會繼續它甚至會發生鼓起來,這是我想要它做的。 (我不想處理異常,只是在代碼停止運行之前刪除文件。)

+0

爲什麼你會不捕獲異常? – IanAuld 2014-10-27 04:14:44

+0

不完整的狀態? :O – 2014-10-27 04:38:01

+0

@IanAuld我想讓這個例外繼續冒泡。它可以是任何東西,甚至是一個KeyboardInterrupt。我只是想要文件被刪除,如果它不完整。 – Peretz 2014-10-27 06:19:02

回答

0

您可以在您的except塊中簡單地調用raise,然後它將重新引發異常以允許異常出現泡沫向上。 See this relevant section of python documentation

對於你的榜樣,你可以寫類似下面的東西:

try: 
    with open(output_path, 'w') as output_file: 
     # Create and write output file. 
except: 
    # Delete the file. 
    # Re-raise the exception with all relevant information (message, stacktrace, etc). 
    raise