python|exm6-1try-except结构|raise关键字|异常类型

发布于:2025-03-21 ⋅ 阅读:(36) ⋅ 点赞:(0)

目录

一、try-expect

1. 多个try-expect结构的使用

1.1 捕捉特定异常

1.2 捕捉全部异常

1.3 所有异常合并处理

2. try-except-else-finally 结构

二、raise 关键字

一、try-expect

        try-expect 结构是 Python 中用于异常处理的关键机制。它允许你捕获并处理代码中可能发生的异常,从而避免程序崩溃,并提供更友好的错误提示或恢复机制。

基本语法:

"""
try 块:包含可能引发异常的代码。
except 块:捕获并处理特定类型的异常。
as:将异常对象赋值给一个变量,便于进一步处理。
"""
try:
    pass    # 可能出现错误的代码
except 异常类型 as 异常对象:
    pass    # 处理异常的代码

1. 多个try-expect结构的使用

1.1 捕捉特定异常

try:
    num = int(input("请输入一个整数: "))
    result = 10 / num
    print("结果是:", result)
except ValueError:  # 值错误
    print("输入的不是整数!")
except ZeroDivisionError: # 除数为0的错误
    print("除数不能为零!")

输出结果:分别是捕捉两种不同错误下的输出情况

请输入一个整数: 5.6
输入的不是整数!
请输入一个整数: 0
除数不能为零!

1.2 捕捉全部异常

        使用expect Exception 可以捕获所有异常(不推荐,除非你知道自己在做什么)

try:
    num = int(input("请输入一个整数: "))
    result = 10 / num
    print("结果是:", result)
except Exception as e:
    print(f"发生错误: {e}")

不管是哪种错误,最后都会输出:"发生错误"

请输入一个整数: 5.6
发生错误

1.3 所有异常合并处理

try:
    num = int(input("请输入一个整数: "))
    result = 10 / num
    print("结果是:", result)
except (ValueError, ZeroDivisionError) as e:
    print(f"发生错误: {e}")

输出结果:

请输入一个整数: 4.5
发生错误: invalid literal for int() with base 10: '4.5'

2. try-except-else-finally 结构

 如果 try 块中的代码没有引发异常,则执行 else 块。

无论是否发生异常,finally 块中的代码都会执行。通常用于释放资源(如关闭文件、断开网络连接等)。

try:
    file = open("example.txt", "r")
    content = file.read()
    print(content)
except FileNotFoundError:
    print("文件未找到!")
finally:
    print("文件已关闭。")

输出结果:在这里说明发生异常的输出情况

文件未找到!
文件已关闭。

二、raise 关键字

        在Python编程中,raise语句用于手动引发异常,这是处理错误和控制程序流程的常用方法。raise可以单独使用,也可以与异常类名和描述信息一起使用,以提供更具体的错误信息。通过try-except结构,可以捕获并处理手动引发的异常,确保程序的正常执行。

基本语法:

raise [exceptionName [(reason)]]
"""
这里,exceptionName是要引发的异常类的名称,reason是对异常的描述信息。如果省略reason,则在引发异常时不会附带任何异常描述信息。如果完全省略可选参数,则raise会引发当前上下文中捕获的异常,或默认引发RuntimeError异常。
"""
try:
    gender=input('请输入你的性别:')
    if gender!='男' or gender!='女':
        raise ValueError('性别只能是男或女') # raise 主动引发异常,在这里指定的异常是Exception
except ValueError as e:
    print(e)
# 这里错误类型要使用已定义的异常类型

输出结果:

请输入你的性别:gou
性别只能是男或女

三、异常类型的产生 

"""
(1)ZeroDivisionError  除数为0的错误 division n.除法
print(10/0)

(2)IndexError  索引错误
lst=[10,20,30,40]
print(lst[4])    序列里总共4个元素,索引是0,1,2,3

(3)KeyError 字典取值时出现的问题
d={'name':'zj','age':20}
print(d['gender'])  要输出字典中key为'gender'对应的值,不存在

(4)NameError
print(hello)   输出一个没加引号的字符串时,会认为它是一个被定义的变量,上文不定义,就会出错

(5)SyntaxError  Python语法错误
print('hello)    只加了一个引号

(6)ValueError  值传入异常
print(int('a'))    int()是将一个变量转为整形,在这里传入的'a'未经过定义,所以传入的是一个字符串,不符合要求

(7)AttributeError 属性或方法不存在的异常 attribute n.属性;特征;性质;定语
i=10
print(i.name) i是一个变量,没有name这个方法

(8)TypeError
print('hello'+123) 用+连接字符串,不能连接整数

(9)IndentationError  缩进异常
    print('hello')
"""

若有错误,敬请批评指正