一、异常简介
异常的组成:
异常类型:异常具体的描述信息
a = input('请输入数字')
# 这里可能会出现异常
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
result = 10 / int(a)
print(f"result={result}")
二、捕获单个异常
# 捕获单个异常
'''
语法格式:
try:
可能发生异常的代码
except 异常的类型:
发生异常执行的代码
'''
a = input('请输入数字:')
# 这里可能会出现异常
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
result = 10 / int(a)
print(f"result={result}")
except ZeroDivisionError:
print('请不要输入0')
三、捕获多个异常
# 捕获多个异常
'''
语法格式1:以元组的形式呈现
try:
可能发生异常的代码
except (异常的类型1,异常的类型2...):
发生异常执行的代码
语法格式2:写多个except语句块
try:
可能发生异常的代码
except 异常的类型1:
发生异常执行的代码
except 异常的类型2:
发生异常执行的代码
...
'''
a = input('请输入数字:')
# 这里可能会出现异常
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
result = 10 / int(a)
print(f"result={result}")
except (ZeroDivisionError,ValueError):
print('您的输入不合法')
# 第二种方式
try:
result = 10 / int(a)
print(f"result={result}")
except ZeroDivisionError:
print('请不要输入0')
except ValueError:
print('请输入纯数字')
四、打印异常信息
# 打印异常信息
# 捕获多个异常
'''
语法格式:使用as关键字
try:
可能发生异常的代码
except (异常的类型1,异常的类型2...) as 变量名:
发生异常执行的代码
# 这行代码打印异常信息
print(变量名)
'''
a = input('请输入数字:')
# 这里可能会出现异常
# ZeroDivisionError: division by zero
# ValueError: invalid literal for int() with base 10: 'a'
try:
result = 10 / int(a)
print(f"result={result}")
except (ZeroDivisionError,ValueError) as e:
print('您的输入不合法')
# division by zero
print(e)
五、捕获所有的异常
# 捕获所有的异常
'''
语法格式1:缺点:不能获取异常的描述信息
try:
可能发生异常的代码
except:
发生异常执行的代码
语法格式2:Exception是常见异常类的父类
try:
可能发生异常的代码
except Exception as e:
发生异常执行的代码
print(e)
Exception--->BaseException--->object
'''
a = input('请输入数字:')
try:
result = 10 / int(a)
print(f"result={result}")
except Exception as e:
print('您的输入不合法')
print(e)
六、异常的完整结构
# 异常的完整结构
'''
语法格式:
try:
可能发生异常的代码
except Exception as e:
发生异常执行的代码
print(e)
else:
代码没有发生异常时会执行
finally:
不管代码有没有发生异常,都会执行
'''
a = input('请输入数字:')
try:
result = 10 / int(a)
print(f"result={result}")
except Exception as e:
print('您的输入不合法')
print(e)
else:
print('else execute!')
finally:
print('finally execute!')
七、异常的传递
try嵌套
# 异常的传递
'''
异常的传递是python异常处理的底层机制,不需要程序员写代码实现,python已经实现好了
异常传递:当一行代码发生异常的时候,会想外层传递这个异常,直到被捕获或报错为止
(1)try嵌套
(2)函数嵌套
'''
# try嵌套
# 内部发生的异常如果没有捕获,会传递到外层
a = input('请输入数字:')
try:
try:
result = 10 / int(a)
except ZeroDivisionError:
print('-----0-----')
print(f"result={result}")
except Exception as e:
print('您的输入不合法')
print(e)
函数嵌套
# 函数嵌套的方法
def fun1():
print(1)
num = 10 / 0
print(num)
print(2)
def fun2():
print(3)
fun1()
print(4)
try:
print(5)
fun2()
print(6)
except Exception as e:
print(7)
print(e)
# 输出结果
'''
5
3
1
7
division by zero
'''
八、抛出自定义异常
# 抛出自定义异常
'''
1.抛出异常:
raise 异常对象
当程序代码遇到raise的时候,程序就报错了
2.抛出自定义异常
(1)自定义异常类,继承Exception类或BaseException类
(2)选择书写__init__()和__str()__以达到效果
(3)在合适的时机抛出异常对象即可
'''
# 定义异常类
class PasswordLengthError(Exception):
pass
def getPassword():
password = input('请输入密码,长度大于6位:')
if len(password) > 6:
print('该密码合法')
elif len(password) <= 6:
raise PasswordLengthError('密码长度过短')
try:
getPassword()
except Exception as e:
print(e)