一、除零异常
# coding=utf-8
# 代码文件: ch10_1.py
i = input('请输入数字: ')
n = 666
result = n / int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
二、捕获异常
我们不能防止用户输入0,但在出现异常后我们能捕获并处理异常,不至于让程序发生终止并退出。
1. try-except 语句
try:
<可能会引发异常的语句>
except [异常类型]:
<处理异常>
# coding=utf-8
# 代码文件: ch10_2_1.py
i = input('请输入数字: ')
n = 666
try:
result = n / int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e: # except
print("不能除以0,异常:{}".format(e))
2. 多个except 代码块
try:
<可能会引发异常的语句>
except 异常类型1:
<处理异常>
except 异常类型2:
<处理异常>
…
except:
<处理异常>
多个except代码块根据异常类型匹配到不同的except代码块。
省略异常类型的except代码块是默认的except代码块,它只能被放到最后,捕获上面没有匹配的异常类。
# coding=utf-8
# 代码文件: ch10_2_2.py
i = input('请输入数字: ')
n = 666
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))
3.多重异常捕获
如果多个except代码块的异常处理过程类似,则可以合并处理,这就是多重异常捕获。
# coding=utf-8
# 代码文件: ch10_2_3.py
i = input('请输入数字: ')
n = 666
try:
result = n / int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except (ZeroDivisionError, ValueError) as e:
print("异常发生:{}".format(e))
4.try-except 语句嵌套
# coding=utf-8
# 代码文件: ch10_2_4.py
i = input('请输入数字: ')
n = 666
try:
i1 = int(i)
try:
result = n / i1
print('{0}除以{1}等于{2}'.format(n, i1, result))
except ZeroDivisionError as e1:
print("不能除以0,异常:{}".format(e1))
except ValueError as e2:
print("输入的是无效数字,异常:{}".format(e2))
三、finally代码块释放资源
有时在try-except语句中会占用一些资源,可使用finally代码块。
try:
<可能会引发异常的语句>
except 异常类型1:
<处理异常>
except 异常类型2:
<处理异常>
…
except:
<处理异常>
finally:
<释放资源>
# coding=utf-8
# 代码文件: ch10_3.py
i = input('请输入数字: ')
n = 666
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('资源释放...')
四、自定义异常类
# coding=utf-8
# 代码文件: ch10_4.py
class ZiDingYiException(Exception):
def __init__(self, message):
super().__init__(message)
五、手动引发异常
现有的自带的异常都是由解释器引发的,至于自定义异常,可通过raise语句手动引发异常。
# coding=utf-8
# 代码文件: ch10_5.py
class ZiDingYiException(Exception):
def __init__(self, message):
super().__init__(message)
i = input('请输入数字: ')
n = 666
try:
result = n / int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
# print("不能除以0,异常:{}".format(e))
raise ZiDingYiException(不能除以0)
except ValueError as e:
# print("输入的是无效数字,异常:{}".format(e))
raise ZiDingYiException(输入的是无效数字)