七、异常处理
http://www.cnblogs.com/Eva-J/articles/7281240.html
1、异常处理
#处理异常
#排错的时候 真正报错的是最下面
#python的代码是不会出错的,应该从下向上找最后一行自己写的代码去处理
#异常处理的应用:
#1.可以用if规避,但是成本太高。
#2.不能用if处理了 StopIteration
if 是预防异常出现的
try是异常出现之后
#异常处理的特点:一旦发生异常,程序就不再执行
2、try...except
2.1 单个错误
try:
num = input('num : ')
int(num) #ValueError
print(num)
except ValueError:
print('请输入一个数字')
#放在try中的代码如果遇到except中的错误类型,就会执行except中的代码
#且一旦发生异常,try中的代码会停止在异常处
#但不影响try语句之外的代码执行
#一种错误类型只能处理对应的一种错误,其他错误还会照常报错
2.2 多个错误
try:
num = input('num : ')
int(num) # ValueError
print(num)
a
sum(1, 2, 3)
except ValueError:
print('请输入一个数字')
except NameError as nameerror:
print('产生了一个%s'%nameerror)
except TypeError:
print('又一个错误诞生了')
3、ecxept..as...
显示错误具体信息
# 在我们不能完全明确的知道这个错误到底是发生了什么的时候
# 就用as 变量名,将变量中存储的错误信息打印出来
3.1 ecxept..as...
3.2 except Exception as e
万能异常
#对于你已经可以预见的但是不能完全规避的必须要处理的异常,
#你应该去指定他的处理方式
#对于其他你不能预料的,在使用万能异常处理
try:
l = []
l[1000] #IndexError
l = [1,23]
l_iterator = iter(l)
next(l_iterator)
next(l_iterator)
next(l_iterator) #StopIteration
except ValueError:
print('请输入一个数字')
except Exception as e:
print(e)
4、else语句
当try语句中不会发生异常的时候就执行else中的代码
try:
a =1
except NameError as e:
print(e)
else:
print('当try语句中不会发生异常的时候执行else中的代码啦')
5、finally
在函数里面即使有return也会执行finally里的语句,finally里的语句最后执行
def func():
try:
f = open('file')
int(f.read())
except ValueError as e:
a = 123
print(456)
return a
finally: #清理的工作 把之前的打开的链接 文件 都关掉
# #避免因为程序异常造成的浪费资源和逻辑问题
f.close()
print(789)
print(func())
6、标准格式
try:
f = open('file')
int(f.read())
except ValueError as t:
print(t)
print('读文件失败了')
except Exception as e:
print(e)
else:
print('成功了') #try代码块中没有异常的时候才会被执行
finally: #finally代码块中的代码永远执行
print("关闭文件")
f.close()
7、raise
主动触发异常
raise可以主动抛异常
8、assert
断言
只要条件不成立 下面代码就不执行,而且会报错