一、异常捕获
在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 = 1second = 1 # 前两个数是1current = 0for i in range(3, value+1): # 后一位是前两个数的和current = first + secondfirst = secondsecond = currentif value == 1 or value == 2:print(1)else:print(current)except ValueError as e:print("输入数据不能转为数字")except LTOne as e: # e为异常类LTOne的实例print("输入数字小于1", e)