2017-07-08 42 views
3

我遇到了不同版本的Python爲json模塊捕獲錯誤的問題。對於Python 2.7.12json模塊針對Python 3.5.2ValueError拋出JSONDecodeError。這樣做的最佳做法是什麼?爲不同版本的Python處理不同的錯誤

例如,這適用於Python 2.7.12

a = '{"a": [5 8]}' 
try: 
    d = json.loads(a) 
except ValueError: 
    # do something 

,這適用於Python 3.5.2

a = '{"a": [5 8]}' 
try: 
    d = json.loads(a) 
except json.JSONDecodeError: 
    # do something 

我已經看到了答案here,但我想找到一個更優雅的方式。

回答

2

JSONDecodeErrorValueError一個子類:

>>> from json import JSONDecodeError 
>>> issubclass(JSONDecodeError, ValueError) 
True 

只是堅持抓ValueError;如果您需要支持這兩個版本,這應該就足夠了。所有JSONDecodeError增加了一些額外的字段,讓您可以輕鬆訪問解析的文檔以及錯誤的確切位置。

如果需要訪問這些屬性(只要它們是存在的),只是用hasattr()第一測試:

try: 
    d = json.loads(a) 
except ValueError as err: 
    pos = (None, None) 
    if hasattr(err, lineno): 
     # JSONDecodeError subclass 
     pos = err.lineno, err.colno 
+0

謝謝。我想從錯誤中得到的只是錯誤信息。所以,這也很好。 –

0

對於json模塊尤其,這基本上是simplejson打包爲json模塊和具有分佈式Python,你可以使用最新的(或至少是相同的)simplejson版本。

這樣,所有版本的Python中的異常將是相同的:JSONDecodeError

相關問題