我应该捕获哪些异常,哪些不应该在Python中

时间:2015-06-04 11:15:31

标签: python exception exception-handling structure

例如,我有一个具有这种结构的程序:

域逻辑模块 - >设置模块 - >设置存储后端

接下来是“设置”模块的一部分。

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')

2 个答案:

答案 0 :(得分:2)

这是一个只有你能回答的问题。您可以捕获所有异常,或者如果它抛出您未处理的异常,您可以让程序崩溃。如果程序不崩溃至关重要,请捕获异常。但是,您应该实现恢复方法。如果Json没有正确加载,你的程序可以在没有它的情况下做任何有用的事吗?如果可以的话,我会抓住异常,否则你只能显示错误并终止。

答案 1 :(得分:1)

您应该以这种方式处理异常,看到堆栈跟踪会立即向您解释问题。

我不是Python专家,但是你不会丢失它实际上是ValueError的信息,导致程序崩溃吗?你只会在跟踪中看到SettingsLoadDataException而没有任何真正的原因,对吗?

另外,如果你不重新抛出异常,你应该只抓住那些,你知道如何处理。让程序崩溃总是比让它处于意外状态更好。