验证和验证:python 中函数中的异常处理

Validation and verification: exception handling within a function in python

提问人:Cory Blake 提问时间:11/8/2023 更新时间:11/8/2023 访问量:25

问:

我正在尝试创建一个添加整数的add()函数。我在异常处理方面遇到了问题,因为我最希望有一个 isinstance 调用来执行我需要的验证和确认。目前,针对三种情况提出了三个异常错误:

  1. 如果没有参数。
  2. 如果输入是 list、set、tuples。
  3. 如果参数不是整数:字符串和浮点数。

这是我目前的实现:

def add(*args):
    if len(args) == 0:
        raise TypeError("add() missing 1 required positional argument: 'value'")

    integer_total = 0

    for numbers in args:
        if isinstance(numbers, (list, set, tuple)):
            raise TypeError("add() does not accept lists, sets, or tuples as arguments")
        elif not isinstance(numbers, int):
            raise TypeError("add() only accepts integer arguments")

        if isinstance(numbers, (list, set, tuple)):
            for num in numbers:
                if not isinstance(num, int):
                    raise TypeError("add() only accepts integer arguments")
            integer_total += sum(numbers)
        else:
            integer_total += numbers

    return integer_total

理想情况下,我想将其称为 isinstance。我尝试使用:isinstance(numbers, (list, set, tuple, string, float)),但我认为我没有正确实现它。

Python 异常

评论

0赞 Stitt 11/8/2023
是否允许传递列表、集合和元组?如果这些类型存在,则代码首先会引发错误,但随后继续(即使无法访问)尝试添加对象的所有元素(如果它们都是整数)。

答:

0赞 Stitt 11/8/2023 #1

您提到尝试使用(原文如此,语法错误除外):

isinstance(numbers, (list, set, tuple, string, float))

尝试捕获所有异常,但仍有许多其他类型可以传递,这些类型在此步骤中不会被捕获。

您需要做的就是验证参数是否整数,您已经这样做了(实际上两次)!只需检查参数是否为(或不是)整数,然后通过引发错误或增加总和来适当地处理它。

def add(*args):
    if len(args) == 0:
        raise TypeError("add() missing 1 required positional argument: 'value'")

    integer_total = 0

    for numbers in args:
        if not isinstance(numbers, int):
            raise TypeError("add() only accepts integer arguments")
        else:
            integer_total = integer_total + numbers

    return integer_total

评论

0赞 Stitt 11/9/2023
不用担心。如果这有帮助,请接受作为答案。