仍然出现类型和值错误
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异常。
要解决这个问题,你必须首先决定在这种情况下你想要发生什么。