每次调用函数时都必须使用 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
内部并在内部处理故障。不过,您使用哪种取决于具体情况。
运行 下面的代码,在调用第一个带有字符串参数的函数后,程序终止。这是显而易见的。但是,我需要做什么才能考虑第二次函数调用?
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
内部并在内部处理故障。不过,您使用哪种取决于具体情况。