2013-03-10 59 views
0

有人問過這個,但答案是建議print哪個不好。你可以建議如何處理錯誤,如JSONDecoderError?

Python: Handle JSON Decode Error when nothing returned

有鑑於此:

class BitbucketError(Exception): 
    pass 

try: 
    response = requests.get('https://bitbucket.org/.......') 
    return response.json()['data'] 

# because JSONDecoderError inherits from ValueError 
except (json.JSONDecoderError, ValueError) as e: 
    raise BitbucketError(response.status_code) 

沒關係。但如果我在另一個項目中,我在那裏做

# save to dabase, example 1 
raw_code = mymodule.bitbucket.file(...) 
db.save(raw_code) 

# return json back to user (api server, example 2) 
raw_code = mymodule.bitbucket.file(...) 
return {'data': raw_code} 

使用這個模塊,我相信我要趕在例外上面代碼片斷。但問題是,我應該讓原來的一個傳播還是自己定義一個異常?

我想看看如何正確處理錯誤,因爲錯誤可能是由於404,405,甚至500

希望這個問題是有道理的。

回答

1

這取決於所述第二片的代碼的情況下很多。例如,它是否適用於您的應用程序中的一些內部自動化?在這種情況下,最好是捕捉異常並向組織中可以處理它的人發送類似於Djangos錯誤郵件的郵件(帶有完整堆棧跟蹤,變量等)。如果是針對某些最終用戶應用程序,則可能需要記錄錯誤(例如發送郵件),併爲用戶提供某種反饋。在這種情況下,您需要以不同的方式處理不同的錯誤代碼。

+0

謝謝!不用於自動化。這是最終用戶。是的,讓我們來看看Django吧。在討論前端之前,我們在代碼中調用'bitbucket.find(..)'。在那種情況下,我是否讓JSONDecoder傳播或定義自定義的?我猜測人們會因爲錯誤而感到快樂,直到用戶應用程序。 – CppLearner 2013-03-10 09:42:02

+0

我認爲這取決於很多錯誤的類型以及最終用戶想要做什麼。由於我沒有這些信息,我無法回答這個問題。例如,如果用戶正在嘗試添加一個bitbucket存儲庫名稱,並且在查找時會從bitbucket服務器獲得一個404,則需要以某種方式向最終用戶提供一條消息,如「無法找到具有該名稱的repo」。 – boxed 2013-03-10 10:24:28