对于Python中错误/非法的参数组合,应该引发哪个异常?

2021-01-26 07:48:46 发布

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

我想知道在Python中指示无效参数组合的最佳实践。我遇到过一些情况,你有这样的功能:

def import_to_orm(name, save=False, recurse=False):
    """
    :param name: Name of some external entity to import.
    :param save: Save the ORM object before returning.
    :param recurse: Attempt to import associated objects as well. Because you
        need the original object to have a key to relate to, save must be
        `True` for recurse to be `True`.
    :raise BadValueError: If `recurse and not save`.
    :return: The ORM object.
    """
    pass

唯一的烦恼是每个包都有自己的,通常略有不同的BadValueError。我知道在Java中存在着java.lang.IllegalArgumentException——大家都很清楚,每个人都将在Python中创建自己的BadValueErrors,还是有另一种首选方法?

3条回答
网友
1楼 ·

我只会提出ValueError,除非您需要更具体的异常。。

def import_to_orm(name, save=False, recurse=False):
    if recurse and not save:
        raise ValueError("save must be True if recurse is True")

class BadValueError(ValueError):pass是没有意义的-您的自定义类在使用中与ValueError是相同的,那么为什么不使用它呢?

网友
2楼 ·

我认为最好的处理方法是python本身处理它的方式。Python引发TypeError。例如:

$ python -c 'print(sum())'
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: sum expected at least 1 arguments, got 0

我们的初级开发人员刚刚在google搜索“python异常错误参数”时发现了这个页面,我很惊讶,自从这个问题被提出后的十年里,这个显而易见的(对我来说)答案从未被提出过。

网友
3楼 ·

我将从ValueError继承

class IllegalArgumentError(ValueError):
    pass

有时最好创建自己的异常,但继承自一个内置的异常,它尽可能接近您想要的。

如果您需要捕获特定的错误,那么有一个名称是有帮助的。

相关问题