2013-08-31 145 views
2

我正在運行一個程序從網上下載文件。我已經引入了一個異常處理urllib.error.HTTPError,但現在我不時得到更多的錯誤,我不知道如何捕獲:http.client.IncompleteRead。我只是將以下代碼添加到底部的代碼中?Python HTTP異常處理

except http.client.IncompleteRead: 

我必須添加多少個例外以確保程序不會停止?我是否必須將它們全部添加到同一個Except語句或幾個Except語句中。

try: 
    # Open a file object for the webpage 
    f = urllib.request.urlopen(imageURL) 
    # Open the local file where you will store the image 
    imageF = open('{0}{1}{2}{3}'.format(dirImages, imageName, imageNumber, extension), 'wb') 
    # Write the image to the local file 
    imageF.write(f.read()) 
    # Clean up 
    imageF.close() 
    f.close() 

except urllib.error.HTTPError: # The 'except' block executes if an HTTPError is thrown by the try block, then the program continues as usual. 
    print ("Image fetch failed.") 

回答

3

您可以添加個人except條款,如果你想處理每個異常單獨類型,或者你可以把他們都在同一個:

except (urllib.error.HTTPError, http.client.IncompleteRead): 

您還可以添加一個通用條款,將捕獲任何東西以前沒有處理:

except Exception: 

欲瞭解更多信息的郵件,你可以打印發生實際的異常:

except Exception as x: 
    print(x) 
+0

謝謝。如果異常是由於無法關閉文件或下載文件或其他不幸事件而會發生什麼情況?我應該嘗試關閉文件作爲緊跟在except語句之後的代碼的一部分嗎? – gciriani

+0

@gciriani:你可以使用'finally'子句來幫助確保文件關閉,或者使用['with'語句](http://docs.python.org/2/reference/compound_stmts.html#the-with -statement)這是一個更好的方法。 –