昨日,在麻省理工学院公开课:计算机科学及编程导论第七集大概25分钟左右上看到一段关于检查输入类型的代码,个人觉得其中的循环让我耳目一新,我自己就依样画葫芦把它改了一下,由于是新手,改的可能不好。下面就是我自己改的一些代码:
input_ok = True
while input_ok:
#value = input("please enter a float: ")
try:
value = float(raw_input("please enter a float: ")) # 类型转换
except EOFError, e: # 将错误原因放在对象e中
print e
except IOError, e:
print e
except ValueError, e: # 数值错误异常处理
print e
else: # 如果没有异常,则执行
if type(value) == type(0.0):
input_ok = False
else:
print "Error! Are you sure it's a float?"
finally: # 不管有没有异常都执行
print "\n"
新改的代码加入了一个类型转换和异常处理,同时把input()改为了raw_input(),类型转换函数float(x)是将对象x转换为浮点数;异常处理是由于如果用户输入的不是数值,比如说是一个字符a,那么float()函数就会转换出错,这时就需要异常处理;至于把input()改为raw_input(),是因为input() 函数会把你输入的东西当做 Python 代码进行处理,这么做会有安全问题,比如说下面这幅图:
我想要用户输入一个数字,但用户却输入一个字母,这样却依然行得通,从而导致了安全问题,input()函数返回的是数值类型,raw_input()返回的字符串类型。个人认为尽量避免用input(),能用raw_input()则用raw_input()。
其实,我最推崇的就是这段代码中的循环语句,因为它能让用户在输错的情况下再次输入。