每次调用函数时都必须使用 try/except 吗?

Do I have to use try/except every time I call a function?

运行 下面的代码,在调用第一个带有字符串参数的函数后,程序终止。这是显而易见的。但是,我需要做什么才能考虑第二次函数调用?

def sum_digits_number(number):
    sum = 0
    for digit in str(number):
        sum += int(digit)

    print(sum)


while True:
    try:
        sum_digits_number("ciao")
        sum_digits_number(9)
    except ValueError:
        print("Not a valid argument")
        break
  • 去掉while True循环(这里没有意义)
  • try/except 放在 sum_digits_number 方法中

代码:

def sum_digits_number(number):
    try:
        s = 0
        for digit in str(number):
            s += int(digit)
        print(s)
    except ValueError:
        print('Not a valid argument')


sum_digits_number('ciao')
sum_digits_number(9)

输出:

Not a valid argument
9

而不是 try/excepting 在函数外只检查函数中的类型:

def sum_digits_number(number):
    if not isinstance(number, int):
        print("Not a valid argument")
    else:
        print(sum(map(int, str(number))))

sum_digits_number("ciao")
sum_digits_number(9)

或使用 2 try/except 块。每个函数调用一个

标题问题的答案是否定的,不是每个函数都需要包裹在try中。只有您希望抛出并希望处理的函数才需要包装。

话虽如此,在这里,是的,两个函数调用都需要单独包装。一旦抛出,将输入 except 并跳过第二个调用。但是,这并不意味着您需要在此代码中包含两个(或更多)完整的 try。您可以将字符串参数放在一个列表中,遍历该列表,并在循环内部有一个 try:

for arg in ["ciao", 9]:
    try:
        sum_digits_number(arg)
    except ValueError:
        # Handle individual failure however here

如果它变得复杂,您也可以将 try 提取到它自己的函数中,或者将 try 放在 sum_digits_number 内部并在内部处理故障。不过,您使用哪种取决于具体情况。