例如,我有一个具有这种结构的程序:
域逻辑模块 - >设置模块 - >设置存储后端
接下来是“设置”模块的一部分。
def load_from_json(self, json_str):
try:
self.load_from_dict(json.loads(json_str))
except ValueError as e:
raise SettingsLoadDataException('Error loading json')
这里需要我自定义异常 SettingsLoadDataException ,或者我可以跳过捕获json.loads错误吗?
def load_from_json(self, json_str):
self.load_from_dict(json.loads(json_str))
更新
同样好的变体是:
def load_from_json(self, json_str):
try:
self.load_from_dict(json.loads(json_str))
except ValueError as e:
raise ValueError('Error loading json')
答案 0 :(得分:2)
这是一个只有你能回答的问题。您可以捕获所有异常,或者如果它抛出您未处理的异常,您可以让程序崩溃。如果程序不崩溃至关重要,请捕获异常。但是,您应该实现恢复方法。如果Json没有正确加载,你的程序可以在没有它的情况下做任何有用的事吗?如果可以的话,我会抓住异常,否则你只能显示错误并终止。
答案 1 :(得分:1)
您应该以这种方式处理异常,看到堆栈跟踪会立即向您解释问题。
我不是Python专家,但是你不会丢失它实际上是ValueError的信息,导致程序崩溃吗?你只会在跟踪中看到SettingsLoadDataException而没有任何真正的原因,对吗?
另外,如果你不重新抛出异常,你应该只抓住那些,你知道如何处理。让程序崩溃总是比让它处于意外状态更好。