我不确定是使用try / except还是if条件来检测数字是int还是float。我知道我的输入是一个浮点数或一个int,我想为所有浮点数引发一个值错误,如果数字为int则执行某些操作。可以看到这种行为的一个例子是一个因子...但是,我不希望将5.0转换为5.什么是最好的方法?
factorial(5)
> 120
factorial(asdf)
> ValueError
factorial(5.0)
> ValueError
我读了这个问题Parse String to Float or Int,但我仍然感到困惑
答案 0 :(得分:4)
此解决方案依赖于int("1.235")
将引发值错误的事实,因为要转换它的字符串必须是 literal int 。这需要my_value
为字符串!因为int(1.235)
只会将float截断为int
my_value = raw_input("Enter Value")
try:
my_value = int(my_value)
except ValueError:
try:
float(my_value)
print "Its a float not an int!"
raise ValueError("Expected Int, got Float!")
except ValueError:
print "Its a string not a float or int"
raise TypeError("Expected Int, got String!")
else:
print "OK its an int"
答案 1 :(得分:1)
如果你想类型安全地检查变量是否是int,你可以使用isinstance()
:
def factorial(var):
if not isinstance(var, int):
raise ValueError('var must be an int')
# do stuff
这显然也会为任何字符串提升ValueError
(因此"5"
不起作用,如果这是你想要的话。)