Python(12)---异常

一、异常简介

异常的组成:
异常类型:异常具体的描述信息

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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值