为了账号安全,请及时绑定邮箱和手机立即绑定

我应该如何检查函数中的参数是整数还是浮点数?

我应该如何检查函数中的参数是整数还是浮点数?

慕田峪7331174 2023-08-08 17:20:17
def sum_of_max(*args):    my_list = list(args)    first_max = max(my_list)    my_list.remove(max(my_list))    return first_max + max(my_list)print(sum_of_max( "qwerty", 1, 6))问题: 我应该如何检查函数中的参数是整数还是浮点数?
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

一种选择可能是:


def sum_of_max(*args):

    if not all(type(x) in (float, int) for x in args):

        raise TypeError("Parameters should be of type 'int' or 'float'")


    my_list = list(args)

    first_max = max(my_list)

    my_list.remove(max(my_list))

    return first_max + max(my_list)


print(sum_of_max( "qwerty", 1, 6))

# Output: TypeError: Parameters should be of type 'int' or 'float'

但它只是max()用更明确的异常替换了引发的异常。最好的选择可能是保持函数原样,并在使用它时捕获潜在的错误:


try:

    print(sum_of_max("qwerty", 1, 6))

except ValueError:

    # Do what you want in case of ValueError


查看完整回答
反对 回复 2023-08-08
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您的函数不应该真正关心它获得的值的类型。它所关心的是:

  1. 列表中的所有值都可以相互比较

  2. 两个最大值可以相加。

最简单的做法是假设这些都是真的,并让>+引发的任何异常传播;无论是谁调用sum_of_max,都可以捕获这些并处理它们,方法是修复参数并sum_of_max再次调用,或者提供一些默认值来代替sum_of_max可能返回的值。max实际上,不使用 而是自己迭代参数更容易做到这一点。

def sum_of_max(*args):

    biggest = None

    second_biggest = None

    for x in args:

        if biggest is None or x > biggest:

            biggest = x

            second_biggest = biggest

    return biggest + second_biggest

请注意,biggest + second_biggest将引发异常的一种情况是,如果没有至少两个可比较的值,在这种情况下,将永远不会为一个或两个值分配除 之外的值None。


查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信