如何找到Python内置函数引发的异常?

2024-09-30 05:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个装饰器来验证一些函数。我尝试尽可能多地使用内置来完成繁重的工作,但是我一直在选择在使用它们时应该捕获哪些异常。你知道吗

例如:

def Validated(fun):
    def ValidatedFun(*args, **kwargs):
        try:
            _ = dict(kwargs.get('untrusted_data', ()))
        except ? as e:
            raise BetterError('Additional relevant info') from e
        return fun(*args, **kwargs)
    return ValidatedFun

我想知道:

  • dict(和其他内置)显式引发的最派生的异常是什么?你知道吗
  • 在哪里可以找到列出它们的文档?(他们不在电视上。) https://docs.python.org/

Tags: 函数datagetreturndefargs装饰内置
2条回答

所有Python标准类型都遵循一些默认异常的约定。行为记录在for the exceptions中,而不是类型。你知道吗

对于dict,异常是^{}^{}。此时可以引发其他异常,但这些异常不依赖于输入(MemoryErrorKeyboardInterrupt)。你知道吗

TypeError表示不支持传入的对象类型;^{} documentation记录接受的类型(映射或iterable对象),其他所有内容都会引发异常。接受的类型必须符合某些期望;如果不满足这些期望,则会引发ValueError(类型正确,但值错误)。你知道吗

没有特定python函数可以抛出的异常列表。这是由于python的duck类型。由于您可以提供任何类型的对象作为函数参数,并且这些函数可以在实现中执行它们想要的任何操作,因此原则上可以引发任何异常。通常,文档很清楚在特定条件下会出现什么异常(例如找不到文件时出现IOError),但这与“函数可以引发的所有异常的列表”不同。你知道吗

我还建议您不要按照计划将异常重定向到“BetterError”中,因为这会隐藏最初发生错误的原因和位置。如果确实要提供更好的错误消息,请在函数开头执行参数验证,并针对无法排除但会引发任何异常的情况引发ValueErrors:

if not is_valid_data(untrusted_data) :
    raise ValueError("invalid input")
unused_dict = dict(untrusted_data)

相关问题 更多 >

    热门问题