一、什么是异常?
我们程序开发的过程中,写代码不可能是一帆风顺的,有些编译期间的错误,IDE会帮我们指出来,但是一些错误是在运行期间才能检测的到的,如果,不对这些错误进行处理的话,必定会影响到程序其他模块的使用,这种在运行期间发生的错误我们称之为异常!
当然,()编程语言中)任何称呼 都是一个对象,异常也是。
二、异常处理
遇到异常,我们要处理它,不是等到异常发生的时候,让IDE帮你处理,等他给你抛出异常的时候,就晚了。因此需要我们在可能发生异常的地方,主动使用try/except语句。来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
有人说了,我怎么知道异常在哪可能会发生呢? 好吧,你这样问我答不上来,这种东西只可言传不可意会。
三、异常处理的语法
try:
.......
except <异常类1> as <实例名1>:
.......
except <异常类2> as <实例名2>:
.....................................................
finally:
......
(1)如果不知道try块中的错误 具体是哪个异常的话,可以except多个异常类,运行期间,发生异常的话,会自动匹配对应的异常
(2)异常类可以是Python内置的,也可以是我们自己定义的
(3)打印异常实例(对象),可以直接输出异常信息。 我们之前学过定制类,还记得__str__ 和 __repr__ 的用法吗
(4)不管异常有没有捕获(处理),我们放在finally块中的代码始终会执行,比如,资源的释放,链接的关闭,都是必须的,所以,遇到这些,放到finally块中,就多加了一重保险。
除数可能发生的异常:
(1)不是有效数字(当然 True 除外,True默认等于1 False就不行了)
(2)将一个字符串强转成Int
(3)等于0
系统提供的上述异常如下:
(1)TypeError
(2)ValueError
(3)ZeroDivisionError
ok,下面,我们demo演示(分两部分演示,一部分在Windows环境下,一部分在Linux系统下)
A、Windows环境
exception.py:
#!/usr/bin/env Python3
# -*- coding:utf-8 -*-
def div(num):
try:
result = 100//num
print(result)
except TypeError as e:
print('TypeException :',e) #打印类型错误 比如 整数 除以 个字符串
except ValueError as e:
print('ValueException :',e) #打印数值错误 比如 试图将一个字符串a强转为int --> int('a')
except ZeroDivisionError as e:
print('ZeroDivisionException :',e) #打印整除0错误 我们知道被除数 是不可以等于0的
finally:
print('try..except..finally is over.....') #finally块中的代码总会执行,一些资源的关闭或释放可以放在该块中
测试:
a.正常:
b.异常☞数值错误 (这个我们需要改下除数)
c.异常☞类型错误 (除数部分我们在改回来)
d.异常☞除数等于0
B、Linux环境
Linux系统装好后,自带Python环境,博主用的Linux版本是CentOS 6.5,Python版本是2.6.6
要想在Linux下编译*.py文件,我们首先需要将*.py文件上传到Linux系统,这里,我们上传本例中的exception.py文件,如何上传文件至Linux系统,可以看我的博文----> 利用SSH工具上传文件到CentOS 6.5
上传好后,我们查看一下,exception.py文件(我们上传到了/root 根目录下)
我们用vim 命令查看一下 exception.py的内容
ok吧,没毛病吧,而且这个Linux下的py文件的编译和在Windows下是一样的,只要装有Python环境就行,有人会问,你Linux的Python环境是2.6啊,而我Windows下是Python 3.6,不冲突吗?
当然,对于这个exception.py里面的代码,是不区分Python版本的,因为是通用的,异常处理这块,就是这样写的。如果,换成其他demo,你就要斟酌一下了。
我们编译一下exception.py文件,交由Python解释器解释一下,拿到结果如下:
对比一下windows下的结果
一模一样,对不对,所以说,不要认为Linux系统很神秘,只不过你用惯了windows系统,对其他系统有抵触心理,感觉离开了windows,你就不会用电脑了一样,所以,接触新事物的时候,不要怕,只管上就行!