2 回答

TA貢獻1868條經(jīng)驗 獲得超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()用更明確的異常替換了引發(fā)的異常。最好的選擇可能是保持函數(shù)原樣,并在使用它時捕獲潛在的錯誤:
try:
print(sum_of_max("qwerty", 1, 6))
except ValueError:
# Do what you want in case of ValueError

TA貢獻1895條經(jīng)驗 獲得超7個贊
您的函數(shù)不應(yīng)該真正關(guān)心它獲得的值的類型。它所關(guān)心的是:
列表中的所有值都可以相互比較
兩個最大值可以相加。
最簡單的做法是假設(shè)這些都是真的,并讓>
或+
引發(fā)的任何異常傳播;無論是誰調(diào)用sum_of_max
,都可以捕獲這些并處理它們,方法是修復(fù)參數(shù)并sum_of_max
再次調(diào)用,或者提供一些默認值來代替sum_of_max
可能返回的值。max
實際上,不使用 而是自己迭代參數(shù)更容易做到這一點。
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將引發(fā)異常的一種情況是,如果沒有至少兩個可比較的值,在這種情況下,將永遠不會為一個或兩個值分配除 之外的值None。
添加回答
舉報