文章目录
- 一、 异常
- 二、多个except异常代码块
- 三、多重异常捕获:
- 四、try-except语句嵌套
- 五、 使用finally代码块释放资源
- 六、自定义异常类
- 七、手动引发异常:
一、 异常
在出现异常的时候,捕获异常并处理,保证程序不会中断。(中括号即 可以省略)
例如:
#coding=utf-8
i = input('请输入数字:')
n = 8888
try:
result = n / int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
print("不能除以0,异常:{}".format(e))
二、多个except异常代码块
不同类型异常要给用户不同的处理方案,所以要有多个except代码块将异常分门别类的去处理。
#coding=utf-8
i = input('请输入数字:')
n = 8888
try:
result = n / int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
print("不能除以0,异常:{}".format(e))
except ValueError as e:
print("输入的是无效数字,异常:{}".format(e))
三、多重异常捕获:
如果多个exce代码块的异常处理过程类似,则可以合并处理。异常类型用逗号分隔。
i = input('请输入数字:')
n = 8888
try:
result = n/int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except (ZeroDivisionError, ValueError) as e:
print("异常发生:{}".format(e))
四、try-except语句嵌套
- 只有有因果关系的才值得使用嵌套。
- 第一个try:如果用户输入的是一些非数字类型的字符串,则捕获异常,将其转换成为有效数字,若转换不了则进行14行except代码块处理。
i = input('请输入数字:')
n = 8888
try:
i2 = int(i)
try:
result = n/i2
print('{0}除以{1}等于{2}'.format(n, i2, result))
except ZeroDivisionError as e1:
print("不能除以0,异常:{}".format(e1))
except ValueError as e2:
print("输入的是无效数字,异常:{}".format(e2))
五、 使用finally代码块释放资源
有时在try-except语句中会占用一些资源,可以使用finally代码块释放资源(保证打开文件后给它关闭)。无论程序走的异常还是正常结束,都会调用finally代码块。
i = input('请输入数字:')
n = 8888
try:
result = n / int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
print("不能除以0,异常:{}".format(e))
except ValueError as e:
print("输入的是无效数字,异常:{}".format(e))
finally:
#释放资源源代码
print('资源释放...')
六、自定义异常类
定义一个异常类,继承Exception父类(由python官方提供的类)。
#coding=utf-8
class ZhijieketangException(Exception):
def _init_(self,message):
super()._init_(message)
- 构造方法,message为异常的错误消息。
- 需要调用父类的构造方法,将message消息传给父类。
七、手动引发异常:
可能没有产生,但是用户就想让其引发异常,即可以通过程序代码引发异常,即将自定义异常引发使用。
- raise语句:可以引发任何类型的异常。
- 使用手动引发异常的目的:由于自定义的一个异常需要引发使用。
class ZhijieketangException(Exception):
def _init_(self, message):
super()._init_(message)
i = input('请输入数字:')
n = 8888
try:
result = n / int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
#print("不能除以0,异常:{}".format(e))
raise ZhijieketangExcept('不能除以0')
except ValueError as e:
#print("输入的是无效数字,异常:{}".format(e))
raise ZhijieketangException('输入的是无效数字')