python异常处理

一、异常捕获

在python中,通过捕获异常,使得程序可以不会因为出错停止运行,捕捉程序有可能产生的异常,防止程序由于异常 导致的出错闪退,异常有可能有,也可能不发生。

"""
try: 执行有可能出错的代码
except: 捕获到具体的异常,针对处理
else: except中语句不执行,则执行else
finally: 无论有没有异常都执行
"""
input_str = input("请输入一个数字")
input_str2 = input("请输入一个数字")
try: 
    input_value = int(input_str)
    input_value2 = int(input_str2)
    print(f"{input_value}除以{input_value2}得{input_value/input_value2}")
    print(f"您输入的被除数是{input_value}")
    print(f"您输入的除数是{input_value2}")
except Exception as e:  # 异常范围太宽泛,不精确
    print("输入有误,格式转换错误", e)
else:
    print("没有发现异常")
finally:
    print("无论有没有异常,都执行")
print("程序正常结束")

try:
    with open("123.txt", "r") as f:
        print(f.read())
except FileNotFoundError as e:  # 具体异常
    print("文件不存在")
except Exception as e:
    print("未知异常")

通过对异常分类,可以跟直观反映代码的异常。

input_str = input("请输入一个数字")
input_str2 = input("请输入一个数字")
try:
    input_value = int(input_str)
    input_value2 = int(input_str2)
    print(f"{input_value}除以{input_value2}得{input_value/input_value2}")
    print(f"您输入的被除数是{input_value}")
    print(f"您输入的除数是{input_value2}")
except TypeError as e:
    print("类型错误")
except ValueError as e:
    print("数值类型错误")
except ZeroDivisionError as e:
    print("错误,除数为0")
except Exception as e:
    print("输入有误,格式转换错误", e)
else:
    print("没有发现异常")
finally:
    print("无论有没有异常,都执行")
print("程序正常结束")

try:
    with open("123.txt", "r") as f:
        print(f.read())
except FileNotFoundError as e:
    print("文件不存在")
except Exception as e:
    print("未知异常")

二、异常类型

这里只举几个常见异常,欢迎补充

"""
Exception 异常(较宽泛的异常)
TypeError 类型异常
ValueError 数值异常
ZeroDivisionError  除数为0异常
FileNotFoundError 文件不存在异常
OperationalError 操作异常
ConnectionError 连接异常
"""

三、抛出异常

我们可以自己设置一个异常类,在合适的位置使用raise关键抛出异常,进行捕获。

# 斐波那契数列
class LTOne(Exception):  # 自定义异常类(小于一),继承异常类
    def __init__(self, msg):
        super().__init__(msg)  # 接收异常原因反馈

while True:
    value_str = input("请输入查找的位数")
    try:
        value = int(value_str)
        if value < 1:
            raise LTOne("小于1")  # 传入异常原因
        else:
            first = 1
            second = 1  # 前两个数是1
            current = 0

            for i in range(3, value+1):  # 后一位是前两个数的和
                current = first + second
                first = second
                second = current
            if value == 1 or value == 2:
                print(1)
            else:
                print(current)

    except ValueError as e:
        print("输入数据不能转为数字")
    except LTOne as e:  # e为异常类LTOne的实例
        print("输入数字小于1", e)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值