try...except...else:
try/except语句用来检测try语句块中的异常,然后让except语句捕获异常信息并处理。如果不希望异常发生导致程序结束,就需要try对异常进行捕获。
语法:不带异常类型
try: #正常执行 <代码...> except 异常类型 : #发生异常时执行 <代码...> else: #没有异常时执行 <代码...>语法2: 带有多种异常类型
try: #正常执行 <代码...> except [(异常类型1[,异常类型2...])]: #捕获到异常类型1或2等时执行 <代码...> except [(异常类型3)] as [参数]: #捕获到异常类型3时执行 参数:接收异常信息的参数 <代码...> else: #没有异常发生时执行 <代码...>
try-finally:
无论是否发生异常都将执行最后的代码(finally)。
语法:
try: <代码...> finally: <代码...> #退出try后总会执行
触发(抛出)异常:
语法:
raise [Exception ( ,args [ ,traceback])]
参数都是可选的。Exception是异常类型 args是变量
def ThrowExc(level): if level<3: raise Exception("我是异常~",level) ThrowExc(2) #触发异常n=input('请输入一个正数') if n<0: raise Exception("你输入的内容有误...")
自定义异常类型:
class MyException(Exception): ...... try: raise MyException("我是异常~") except MyException,e: #e接收异常信息 print e #打印异常信息 class MyException(Exception): pass try: raise MyException("我是异常~") except MyException as e: #e是异常信息 print e #打印异常信息
exceptions异常模块包含有很多异常类型,可以通过导入异常模块,再根据dir(exceptions)查看
异常的小栗子:
# -*- coding: cp936 -*- fn=raw_input('请输入您要打开的文件的文件名:')+'.txt' #python3以上的版本: #fn=input('请输入您要打开的文件的文件名') try: fo=open(fn,'r') except IOError,e: print('你查找的的文件不存在...') finally: try: fo.close() except NameError e: pass print "操作已完成..." 如果指定要打开的文件不存在,那么fo=open(fn,'r')会出异常,通过try...except捕获异常。如果文件存在的话,我们需要fo.close()来关闭文件释放占用的资源,所以我们需要在finally中添加这句,而在文件不存在的情况下,fo.close()也会出现异常,因此就需要在finally里面再嵌套一个try...except捕获异常IOError:输入输出异常
ImportError:无法引入模块或包,一般是路径问题
IndexError:下标超出边界
IndentationError:代码没有正确的对齐
KeyError:试图访问字典中不存在的键
NameError:使用没有初始化的变量
SyntaxError:代码逻辑语法错误
TypeError:传入的对象类型与要求不符
ValueError:传入一个不被期望的值
AttributeError:试图访问一个对象没有的属性
UnboundLocalError:试图访问一个还未设置的全局变量
AssertionError:assert语句失败