Python:抛出异常或返回无?

标签 python error-handling

<分区>

我想就这两个片段中哪一个是处理查找的更 Python 方式获得您的反馈。

我正在为 XML 文件开发包装器。我正在加载 XML 文件,对其进行解析,将内容存储在字典中,然后允许通过类方法进行访问。

特别是 - 如果给定的没有返回结果,我应该返回 None 还是引发 (Key)Error?

我有点困惑,因为有些人建议我抛出一个错误而不是返回一个空值。他们说,如果没有更高级别的错误,处理起来会更容易、更清晰。

这是代码的简化版本:

class NoResult(KeyError):
    pass



class Wrapper(object): 
    ....

    self.my_dict = {}

    ....

    get_Entity(self, id):
        if id in self.my_dict:
            value = self.my_dict[id]
            return value
        else:
            return None





class Wrapper(object): 

    ....

    self.my_dict = {}

    ....

    get_Entity(self, id):
        if id in self.my_dict:
            value = self.my_dict[id]
            return value
        else:
            throw NoResult

非常感谢您的想法!

最佳答案

后者符合您对标准 Python 类型的期望,并且可以简化为:

def get_Entity(self, id):
    return self.my_dict[id]

如果 id 不在 self.my_dict 中,这将为您引发 KeyError。收到错误会告诉调用函数字典中没有预期的内容 - 安静地返回 None 会让您稍后再遇到细微的错误(除非您立即检查 if val is None,在这种情况下,无论如何您都可以使用 try)。

(其他版本也可以简化为:

def get_Entity(self, id):
    return self.my_dict.get(id)

).

关于Python:抛出异常或返回无?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297364/

相关文章:

python - 为什么这个已弃用的 Factory.set_creation_function 的替代方法不能与 nosetests 一起使用?

python - 尝试找到所有满足 f(x,y) = 0 且 g(x,y) = 0 的有序对 (x,y);即,我试图找到多变量函数的根

python - 如何处理 f 字符串中的错误?

windows - Powershell where-object 返回代码

scripting - 模式匹配args,并在轻量级Scala脚本中给出错误消息

python - 清理从 csv 文件中提取的字符串

python - 旋转 Pandas 数据框以生成(seaborn)热图

python - 如何重用Python TCP套接字

r - 如何修复tidygraph中的 “function should not be called directly”错误?

python - Python/numpy 中的 n 维网格