异常是指程序中的例外,违例情况。异常机制是指程序出现错误后,程序的处理方法。当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理。
python中使用try...except语句捕获异常,异常子句定义在try子句后面。try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常,加上else和return语句,便可用来判断某段代码是否正常运行,将结果返回。
举个栗子:
try: file("hello.txt", "r") #如果文件不存在,引发异常 print "读文件" except IOError: #捕获IO异常 print "文件不存在" except: #其它异常 print "程序异常"
try也可加上finally语句,finally语句表示无论结果是什么,都执行此语句。栗子:
try: f = open("hello.txt", "r") try: print f.read(5) except: print "读文件异常" finally: print "释放资源" f.close() except IOError: print "文件不存在"
举个实际中使用的例子吧,程序中要求用户input字符串,字符串是一个嵌套的字典,通过json解读字符串并从中取值。所以,如果不符合要求的字符串在处理过程中就会报错导致中断,那就需要牛掰的try...except...else选手出场了,下面的代码:
#定义确认用户输入格式是否为ha配置文件所需格式函数 def enter_query(add_contect_str): """ :param add_contect_str: 用户选择修改配置文件后,输入的格式必须为字典 :return: Flase=用户输入格式不正确 True=用户输入格式正确 """ try: #尝试将用户输入字符串转化为列表,并给变量赋值 add_contect=json.loads(add_contect_str) search_info=add_contect['backend'] weight=add_contect['record']['weight'] server=add_contect['record']['server'] maxconn=add_contect['record']['maxconn'] except: #如果异常,return 值为False return False else: #如果无报错,return 值为False return True
这样一个函数,把return值传给后面的代码,即使输入格式错误,直接print("格式错误")提示用户就行啦,从而避免了程序中断。