如果用户尝试划分 10/"狗",我正在尝试防止错误。即使使用异常,我仍然收到错误



仍然出现类型和值错误

def my_divider(a,b):         
try:return a/b 

except ZeroDivisionError:
return"Error: You cannot divide a number by 0"

except TypeError:         
a=float(a)
b=float(b)
return a/b

except ValueError:
return"Please enter an integer"

var1=10
var2='dog'
print(my_divider(var1,var2))

我将回复@dkamins在这里所说的内容,但我需要代表,所以我将在这里尝试一下。

你正在编写的代码看起来如此接近,当你看到它时,你会踢自己。很好地使用了try except子句!你看起来已经像个蟒蛇专家了。是的,当你试图分配b = float(b)时,错误发生了,当isinstance(b,str)时,但我看到,我认为,你试图捕捉那个异常。但是由于它与分隔的try-except子句内联,所以它的行为与您所看到的一样。比如:

def my_divisor(a,b):
try:
return a/b
except ZeroDivisionError:
print("You cannot divide by the number 0")
return None

except TypeError:
try:
a = float(a)
b = float(b)
return a/b
except ValueError:
print('Error converting type of a, b to numeric. Just put in some numbers, pls')
return None

小心! !我们没处理好什么。my_divisor(40,"0")会返回多少?我想你从这里得到了它,朋友!

您正在捕获TypeError,这是正确的。如果你从这个except块返回一些字符串,你的程序将没有任何问题地运行,并打印返回的字符串。但是,通过将dog转换为string,您正在提高另一个ValueError

请记住,所有这些except块都是一个try块。你要做的是,如果我在处理第一个异常时引起另一个异常,我将写另一个except块,那将不起作用。你必须再写一个try-except块。

首先,请将您的代码粘贴到问题中。

在你的例子中,TypeError是触发的,但是当调用float('dog')时,你会导致二次ValueError异常。

要解决这个问题,你必须首先决定在这种情况下你想要发生什么。

相关内容

最新更新