Python3 : Fail to raise TypeError
我想在类中的方法的参数是非整数时引发TypeError,但是我失败了。 代码如下,我在第一个参数中放了一个"N",并期望得到一个TypeError,并打印"不能将Rectangle设置为非整数值",但我得到的是"Traceback" (最近的电话最后一次):
文件"/Users/Janet/Documents/module6.py",第19行,in
r1.setData(N,5)
NameError:名称'N'未定义"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class Rectangle: def __init__ (self): self.height = 0 self.width = 0 def setData(self, height, width): if type(height) != int or type(width) != int: raise TypeError() if height <0 or width <0: raise ValueError() self.height = height self.width = width def __str__(self): return"height = %i, and width = %i" % (self.height, self.width) r1 = Rectangle() try: r1.setData(N,5) except ValueError: print ("can't set the Rectangle to a negative number") except TypeError: print ("can't set the Rectangle to a non-integer value") print (r1) |
编辑答案以反映新的更准确的解释。
正如@Evert所说,N未定义,因此Python正在查看变量N是什么,并且它没有找到任何东西。 如果你改为写"N"(使它成为一个字符串),那么你的程序应该返回TypeError。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class Rectangle: def __init__ (self): self.height = 0 self.width = 0 def setData(self, height, width): if type(height) != int or type(width) != int: raise TypeError() if height <0 or width <0: raise ValueError() self.height = height self.width = width def __str__(self): return"height = %i, and width = %i" % (self.height, self.width) r1 = Rectangle() try: r1.setData("N",5) except ValueError: print ("can't set the Rectangle to a negative number") except TypeError: print ("can't set the Rectangle to a non-integer value") print (r1) |
打印出:
"无法将Rectangle设置为非整数值
height = 0,width = 0"
考虑使用typeof,如下所示:检查变量是否为整数
顺便提一下,你的商家信息中有一些糟糕的格式。 改变这个:
1 2 3 4 5 6 7 | def setData(self, height, width): if type(height) != int or type(width) != int: raise TypeError() if height <0 or width <0: raise ValueError() self.height = height self.width = width |
对此:
1 2 3 4 5 6 7 | def setData(self, height, width): if type(height) != int or type(width) != int: raise TypeError() if height <0 or width <0: raise ValueError() self.height = height self.width = width |