python 异常处理

"""
捕捉程序有可能产生的异常
防止程序 由于异常 导致的出错闪退
有可能有 也可能不发生

try: 执行有可能出错误的代码
except: 捕获到具体异常,针对处理
else: 如果没有异常就执行
finally: 有没有异常都会执行

Exception
	所有异常类的父类
	可以捕获所有异常
		不够具体

"""

Python 的异常处理机制允许你捕获和处理程序运行时可能发生的错误,从而防止程序崩溃并提供更好的用户体验。Python 的异常处理主要依赖于 tryexceptelsefinally 语句。

一.捕获所有异常

# 从用户输入获取第一个数字
input_str = input("输入数字: ")  
# 从用户输入获取第二个数字
input_str2 = input("输入第二个数字: ")

try:
    # 尝试将输入的字符串转换为整数
    input_value = int(input_str)
    input_value2 = int(input_str2)
    # 尝试计算两个数字的除法
    print(f"你输入两个数字相除为 {input_value / input_value2}")
except TypeError as e:
    # 捕获并处理类型错误
    print(f"类型异常")
except ValueError as e:
    # 捕获并处理值转换错误(如输入无法转换为整数)
    print(f"值转换错误")
except ZeroDivisionError as e:
    # 捕获并处理除零错误(第二个数字为0)
    print(f"除数为0")
except Exception as e:
    # 捕获所有其他异常
    print(f'输入错误,类型转换失败', e)
else:
    # 如果没有引发异常,则执行此块
    print(f"没有发现异常")
finally:
    # 无论是否发生异常,此块始终会执行
    print(f"有没有异常都会执行")

# 程序结束
print("程序正常结束,不报错")

说明:

  1. input("输入数字: ") 和 input("输入第二个数字: ") 用于提示用户输入数据。
  2. try 块用于尝试执行可能引发异常的代码。
  3. except 块用于捕获并处理不同类型的异常。
  4. else 块在 try 块没有异常时执行。
  5. finally 块无论如何都会执行,用于确保必要的清理操作。

二.自定义异常

  • # 自定义异常类 LTOne,继承自 Exception 类
    class LTOne(Exception):
        def __init__(self, msg):
            super().__init__(msg)  # 调用父类 Exception 的初始化方法
    

  • LTOne 是一个自定义异常类,继承自 Python 内建的 Exception 类。
  • __init__ 方法用于初始化异常对象,msg 参数是异常消息,用于描述异常的原因。
  • super().__init__(msg) 调用父类 Exception 的初始化方法,以确保异常对象正确地初始化。
# 无限循环,持续接收用户输入
while True:
    input_str = input("输入一个正整数")  # 提示用户输入一个正整数
    try:
        input_value = int(input_str)  # 尝试将用户输入的字符串转换为整数
        try:
            if input_value < 1:  # 如果转换后的整数小于1
                raise LTOne("小于1")  # 抛出自定义异常 LTOne
        except LTOne as e:
            print(f"输入的数字小于1,请重新输入")  # 捕获 LTOne 异常,提示用户输入的数字小于1
        else:
            print("奇数" if input_value % 2 else "偶数")  # 如果没有异常,判断并打印输入的整数是奇数还是偶数
    except ValueError as e:
        print(f"输入的不能转为数字请重新输入")  # 捕获 ValueError 异常,提示用户输入的内容不能转换为数字
  1. 无限循环

    • while True: 创建一个无限循环,程序将持续运行直到被手动终止(如按 Ctrl+C)。
  2. 用户输入

    • input_str = input("输入一个正整数") 提示用户输入一个正整数。input_str 存储用户输入的字符串。
  3. 尝试将字符串转换为整数

    • input_value = int(input_str) 尝试将用户输入的字符串转换为整数。如果输入的字符串不能转换为整数,会引发 ValueError 异常。
  4. 内部异常处理

    • 内部的 try 块检查 input_value 是否小于 1。如果小于 1,则抛出自定义异常 LTOne
    • 如果引发了 LTOne 异常,except LTOne as e: 块会捕获到这个异常并打印提示信息:"输入的数字小于1,请重新输入"。
    • 如果没有引发 LTOne 异常,else 块会执行,判断并打印输入的整数是奇数还是偶数。
  5. 处理 ValueError 异常

    • 如果用户输入的内容无法转换为整数,except ValueError as e: 块会捕获到这个异常并打印提示信息:"输入的不能转为数字请重新输入"。
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值