主要内容
1. try-except、else、finall用法
2. 捕获已知异常、未知异常
3. 自定义异常类
使用样例
# Exception异常类
def except_test1():
try:
a = int(input("请输入一个数字:"))
print(1 / a)
# 捕获已知的异常ZeroDivisionError, 符合该异常类型则会抛出该异常,否则默认使用except:处理
except ZeroDivisionError:
print('分数不能为0')
# except是所有异常类的父类,常用于捕获未知的异常
except:
print('其他错误')
# try-except-else用法
def except_test2():
try:
x = int(input())
print(x + 2)
# 异常类对象e,可输出该异常信息
except ValueError as e:
print(e)
# 无异常时执行的代码
else:
print('没有错误发生')
# finally用法
def except_test3():
try:
f = open('aaa', 'r')
print(f.read())
except FileNotFoundError:
print('文件找不到')
finally:
print("有无异常时都会被执行")
# 使用raise捕获异常
def except_test4():
a = (1, 2, 3)
try:
# print异常,则后面的语句不会执行到raise,此时使用raise保存异常信息不会执行到
print(a[4])
# 只有执行到以下raise才会抛出异常,如需使用raise,最好放在if语句中判断为异常
raise Exception("抛出异常")
except Exception as e:
print(e)
# 下面直接一句,raise,会让程序终止
# raise
# 捕获多个异常
def except_test5():
a = [1, 2, 3, 4]
try:
print(a[10])
except IndexError:
print('异常1:下标错误')
except TypeError as e:
print('异常1:', e)
b = (1, 2, 3)
try:
print(b - 5)
# 元祖指定多个异常类,捕获多个已知的异常
except (TypeError, ValueError) as e:
print('异常2:', e)
# assert抛出异常
def assert_emp():
x = 101
print(x)
# 设置断言,判断为false抛出异常,会终止程序运行
assert x < 100, 'x不能超过100'
print('x<=100')
# 自定义异常需要继承父类Exception
class MyExcept(Exception):
def __init__(self, error):
self.error = error
# 此处可缺省
# def __str__(self):
# return repr(self.error)
# 自定义异常测试
def myExceptionTest():
try:
s = input("请输入:")
if not s.isdigit():
# 运行到raise时,会直接跳到except处执行
raise MyExcept("输入的不是数字")
print('ok')
except MyExcept as e:
print('自定义异常:', e)
if __name__ == "__main__":
# except_test1()
# except_test2()
# except_test3()
# except_test4()
# except_test5()
# assert_emp()
myExceptionTest()