异常和错误

写程序的时候可能会犯错,有些错是语法层面的,无法去执行,这就是错误。有些错误语法上符合规范,但由于自身逻辑失误或者其他原因造成运行时出现故障,这就是异常,异常又称为运行时错误。不管是错误还是异常(如果未处理)都会导致程序停止运行。

错误举例:你定义变量用数字开头;你用echo来输出变量而不是print,这些在python中这是不允许的。

异常举例:一个列表lis有2个元素,你却写lis[2]让他输出第3个元素;一个字典只有key1你却写dict['key2']让他输出。

为什么学习异常处理

假设要读取10000个文件的数据,第1个文件名写错了但其他9999个文件都是ok的,可偏偏因为第1个文件读取错误就导致程序挂掉,本来能成功读取9999个的机会也被扔掉了。这个事情就很不划算。如果10000个文件你不知道哪个文件名不对呢?岂不是每一个都要判断一下文件是否存在,这也会增加代码量。

所以,此情此景就得用异常这种机制来处理了。

初步感受下语法

一个简单的案例感受下效果,具体的语法后面会介绍。情景:用10除以列表里每一个元素得到一个新的列表。前提是原列表有个0。我们看下加异常和不加异常的效果。

# -*- coding: utf-8 -*-
lis = [1,0,2,3,4,5]
# 异常处理
for i in lis:
try:
print(10/i)
except Exception as e:
print(e,'除0是不行的')
else:
pass
print('-----------------')
for i in lis:
print(10/i)
10.0
division by zero 除0是不行的
5.0
3.3333333333333335
2.5
2.0
-----------------
10.0
Traceback (most recent call last):
File "D:/pyscript/py3script/python66/python66.py", line 17, in 
print(10/i)
ZeroDivisionError: division by zero

什么时候用异常处理

作为新手可能会想为了让程序不挂掉我在每一句代码上都加上异常。这样是不合理的,过犹不及。异常检测也会消耗计算机的资源影响程序的效率。

在程序中适合加异常的是那些你无法100%预知结果可能会错的地方。比如爬虫程序抓取一个网页可能会出现网络断了,此时请求网页的过程可以加个异常处理。