2 回答
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
TA贡献1895条经验 获得超7个赞
您的函数不应该真正关心它获得的值的类型。它所关心的是:
列表中的所有值都可以相互比较
两个最大值可以相加。
最简单的做法是假设这些都是真的,并让>
或+
引发的任何异常传播;无论是谁调用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。
添加回答
举报