132-异常

罗列捕获异常的语法结构,知晓异常捕获的使用场景

什么是异常:当检测到一个错误(不是语法错误)时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"。

异常≠错误
异常往往是由于输入信息异常或者未知的结果导致程序无法执行!

除数为0异常:
读取文件异常:FileNotFoundError
No such file or directory

异常捕获方法

完整方法

try:
	可能出现异常的代码
except Exception as e:  # 不需要获取异常信息的话"Exception as e"可以不写
	如果try语句中的代码出现了异常,则立即执行后续代码
	print(e)  # 实际工作中可以写入到日志中 
else:
	当try语句中的代码没有出现异常,则执行else语句中的代码,反之,则不执行
finally:
	特别适合实现一些收尾的工作,因为它是**无论是否异常都会执行**的代码

捕获异常获取错误信息

把异常信息写入日志文件(某天某日某时出现某错误)

try:
	A 方案  可能出现异常的代码
except Exception as e:
	B 方案  如果try语句中的代码出现了异常,则立即执行后续代码
	print(e)  # 实际工作中可以写入到日志中 

!!例子

    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except ZeroDivisionError:
            return "除数不能为零"
        except TypeError:
            return "类型错误"
        except ValueError:
            return "值错误"
        except (IndexError, KeyError):
            return "索引或键不存在"
        except Exception as e:
            return f"未知错误: {type(e).__name__} - {str(e)}"
    return wrapper

常用错误

    exceptions_dict = {
        "ZeroDivisionError": "除零错误 - 当除数为零时",
        "TypeError": "类型错误 - 当操作或函数应用于不适当类型的对象时",
        "ValueError": "值错误 - 当操作或函数接收到类型正确但值不适当的参数时",
        "IndexError": "索引错误 - 当序列下标超出范围时",
        "KeyError": "键错误 - 当字典中找不到指定的键时",
        "FileNotFoundError": "文件未找到错误 - 当试图打开不存在的文件时",
        "IOError": "输入/输出错误 - 当输入/输出操作失败时",
        "NameError": "名称错误 - 当使用一个未定义的变量时",
        "AttributeError": "属性错误 - 当对象没有指定的属性或方法时",
        "SyntaxError": "语法错误 - 当代码不符合Python语法规则时",
	    "ImportError": "导入错误:循环导入会导致"
    }