Python 基础 (七)Python的异常处理机制

Python基础文章系列

Python 基础 (一)Python基本认识与环境搭建Python 基础 (一)Python基本认识与环境搭建
Python 基础 (二)Python变量与基本数据类型Python 基础 (二)Python变量与基本数据类型
Python 基础 (三)Python基本语句与基本运算Python 基础 (三)Python基本语句与基本运算
Python 基础 (四)Python函数Python 基础 (四)Python函数
Python 基础 (五)Python包与模块Python 基础 (五)Python包与模块
Python 基础 (六)Python的文件模块Python 基础 (六)Python的文件模块
Python 基础 (七)Python的异常处理机制Python 基础 (七)Python的异常处理机制
Python 基础 (八)Python的类与对象Python 基础 (八)Python的类与对象
Python 基础 (九)Python的内置模块Python 基础 (九)Python的内置模块
Python 基础 (十)Python实现简单的图书管理系统Python 基础 (十)Python实现简单的图书管理系统

在这里插入图片描述

4.7 错误与异常

作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。
Python 有两种错误很容易辨认:语法错误和异常。
Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
assets-py.webp

4.7.1 语法错误

Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例

# ---encoding:utf-8---
# @Time    : 2023/9/3 10:11
# @Author  : Darwin_Bossen
# @Email   :3139066125@qq.com
# @Site    : 语法错误
# @File    : ErrorTest.py

if __name__ == '__main__':
    while True print('Hello world')

SyntaxError: invalid syntax

这个例子中,函数 print() 被检查到有错误,是它前面缺少了一个冒号 :
语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。

4.7.2 异常

即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

# ---encoding:utf-8---
# @Time    : 2023/9/3 10:13
# @Author  : Darwin_Bossen
# @Email   :3139066125@qq.com
# @Site    : 常见异常
# @File    : ErrorTest02.py

if __name__ == '__main__':

    # 算术异常
    print(10/0)
    # 索引异常
    arr=[1,2,3,4,5,6,7,8,9,10]
    print(arr[10])
    # 键异常
    dict={"name":"Darwin","age":18}
    print(dict('hhj'))
    # 类型异常
    print(10+"hello")
    # 值异常
    print(int("hello"))
    # 文件异常
    f=open("hello.txt","r")
    print(f.read())

4.7.3 异常处理

try/except

异常捕捉可以使用 try/except 语句
try_except.png

# ---encoding:utf-8---
# @Time    : 2023/9/3 10:17
# @Author  : Darwin_Bossen
# @Email   :3139066125@qq.com
# @Site    : 异常处理
# @File    : ErrorTest03.py

if __name__ == '__main__':
    try:
        print(10/0)
    except Exception as e:
        print(e)
    finally:
        print("程序执行完毕")

try 语句按照如下方式工作;

  • 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
  • 如果没有异常发生,忽略 except 子句,try 子句执行后结束。
  • 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
  • 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。
try/except…else

try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后,else 子句将在 try 子句没有发生任何异常的时候执行。

# ---encoding:utf-8---
# @Time    : 2023/9/3 10:19
# @Author  : Darwin_Bossen
# @Email   :3139066125@qq.com
# @Site    :  异常处理: try/except...else
# @File    : ErrorTest04.py

if __name__ == '__main__':
    try:
        print(10/1)
    except Exception as e:
        print(e)
    else:
        print("程序执行完毕")

try_except_else.png

try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码
try_except_else_finally.png

# ---encoding:utf-8---
# @Time    : 2023/9/3 10:21
# @Author  : Darwin_Bossen
# @Email   :3139066125@qq.com
# @Site    : try-finally
# @File    : ErrorTest05.py

if __name__ == '__main__':
    # 读取文件
    try:
        f = open("hello.txt", "r")
        print(f.read())
    except Exception as e:
        print(e)
    finally:
        if f:
            f.close()
        print("程序执行完毕")
        

4.7.4 抛出异常

Python 使用 raise 语句抛出一个指定的异常。
raise.png

# ---encoding:utf-8---
# @Time    : 2023/9/3 10:24
# @Author  : Darwin_Bossen
# @Email   :3139066125@qq.com
# @Site    : raise 异常
# @File    : ErrorTest06.py

if __name__ == '__main__':
    try:
        print(10/0)
    except Exception as e:
        raise e
    finally:
        print("程序执行完毕")

4.7.5 用户自定义异常

  • 你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承
# ---encoding:utf-8---
# @Time    : 2023/9/3 10:26
# @Author  : Darwin_Bossen
# @Email   :3139066125@qq.com
# @Site    : 自定义异常
# @File    : ErrorTest07.py

# 自定义异常
class MyException(Exception):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg

if __name__ == '__main__':

    try:
        raise MyException("自定义异常")
    except MyException as e:
        print(e)
    finally:
        print("程序执行完毕")
        

4.7.6 总结

Python的异常机制是一种处理程序中出现错误的方式。异常是在程序执行过程中检测到的错误或异常情况,它们可以阻止程序正常运行。Python使用tryexcept语句来处理异常,以下是异常处理的基本结构:

try:
    # 可能会引发异常的代码
    result = 10 / 0  # 这里故意引发了一个除零异常
except ZeroDivisionError:
    # 处理特定类型的异常
    print("除零错误发生了!")
except Exception as e:
    # 处理其他类型的异常,并可以访问异常对象
    print(f"发生了异常:{e}")
else:
    # 如果没有异常发生,执行此块
    print("没有发生异常。")
finally:
    # 无论是否发生异常,都会执行此块
    print("无论如何都会执行的代码块。")

上述代码示例中,程序尝试执行可能引发异常的代码块(在try块内)。如果异常发生,程序会跳转到匹配的except块进行处理。如果没有异常发生,将执行else块。最后,不管是否发生异常,都会执行finally块。
Python提供了多种内置异常类型,例如ZeroDivisionError(除零异常)、TypeError(类型错误)、ValueError(值错误)等。你可以根据需要捕获和处理这些异常,或者创建自定义异常类以处理特定情况下的异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值