python语言是编程中使用率在Top 3之内的语言。python语言以灵活与简单著称,那么越是灵活的语言越需要判断出错的功力。
简单示例
以下是一个简单的错误程序,被除数不可为0,那么看看该代码的执行。
a =
b =
c = a / b
print c
出错报告是:在文件error_three.py 的第5行 c = a / b报错,原因是整数除法或者取模运算的被除数为0
解释异常被捕获的流程:当程序运行到 c = a / b时,有异常产生,然后python解释器就捕获了该异常,并判断异常的类型,最后将该异常抛出,终止了程序的运行
python的异常捕获原则是这样的:程序某一行产生异常,解释器会一层层的上报,寻找异常的捕获代码。如果解释一直上报到main()函数中都没有捕获异常的语句,那么main()函数会捕获到异常,并抛出异常。
下面看一个复杂一点的函数异常处理:
#coding:utf-
def get_num():
num = int(input("input you num:"))
return num
def fun_two():
num = get_num()
div = -num
return div
def fun_three():
two_num = fun_two()
three_num = / two_num
print three_num
if __name__ == '__main__':
fun_three()
这里产生异常的点有两个:
1、被除数为0,在13行
2、输入类型错误在4行
首先我们看第一个异常:
输入10,div = 10 - 10 = 0,three_num = 10 / 0,然后报错。
具体分析报错信息,从上到下:
1、错误出现在文件error_two.py中的19行,出错函数:fun_three
2、在fun_three中的14行,代码:three_num = 10 / two_num中报错,原因是:被除数不能为0。
按照python解释器的工作原理:程序在14行出错,然后一层层上报到main函数,main函数从上到下找到出错点。下面看看第二个错误是不是也符合这个规律。
出错解释:
1、程序在19行出错,出错函数是:fun_three
2、fun_three内部在13行出错,出错代码是函数:two_num = fun_two()
3、fun_two内部在8行出错,出错代码是函数:num = get_num()
4、get_num函数在第4行出错,出错代码是:num = int(input("input you num:")) 。出错原因是:类型错误,int()函数不能转化非数字类型的函数
从以上的分析来看,我们按照一个规律肯定能找到程序出错的地方和原因。但是光找到出错的地方还不够,还要能够自动的处理这些错误。程序要达到的效果是坚决不出错误,万一出了错误也要能够自动的捕获错误,记录下来。本着个原则,我们看看在python中是如果主动捕获错误的。
以第一个简单的程序为例,报错如下