Python程序中的异常处理解决方法

如何在Python程序中抛出异常,又不影响正常程序运行

在Python中,可以使用try...except...语句捕获异常。如果我们在程序中遇到了异常情况,可以使用raise语句主动抛出异常,从而触发try...except...块中的异常处理逻辑。如果我们希望抛出异常时不影响程序的正常运行,可以在异常处理块中添加一些代码来处理或忽略异常。

下面是一个简单的示例,演示了如何在Python中抛出异常并不影响程序的正常运行:

def divide(a, b):
    try:
        # 尝试计算 a/b 的值
        result = a / b
    except ZeroDivisionError:
        # 如果 b 为 0,抛出异常
        raise ValueError("Cannot divide by zero.")
    else:
        # 如果计算成功,返回计算结果
        return result

if __name__ == '__main__':
    nums = [(10, 2), (5, 0), (8, 4)]
    for a, b in nums:
        try:
            result = divide(a, b)
        except ValueError as e:
            # 捕获异常并打印错误信息,但不会影响程序的正常运行
            print(f"Error: {
     e}")
        else:
            print(f"{
     a}/{
     b} = {
     result}")

在上面的示例中,我们定义了一个名为divide的函数,它接受两个参数 a 和 b,并尝试计算 a/b 的值。如果 b 为 0,程序会抛出ValueError异常。

在程序的主逻辑中,我们使用一个循环遍历一个包含多个数字对的列表,并依次调用divide函数计算它们的商。如果在计算过程中出现异常,程序会捕获并打印错误信息,但不会影响后续的计算和程序的正常运行。

需要注意的是,在实际开发中,我们应该根据具体的业务需求和异常类型,合理地处理或忽略异常,避免对程序的稳定性和安全性造成影响。

自定义异常类型在实际应用中的用法和好处

假设我们正在编写一个学生信息管理系统,其中需要处理各种类型的异常,例如输入无效、文件读写错误、数据库连接失败等。我们可以定义多个自定义异常类型来表示不同类型的异常,并在程序中使用 try-except 块捕获并处理异常。以下是一个示例代码:

import csv
import sqlite3
from datetime import datetime

# 自定义异常类型:无效输入异常
class InvalidInputException(Exception):
    def __init__(self, message):
        self.message = message

# 自定义异常类型:文件读写异常
class FileIOException(Exception):
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode

# 自定义异常类型:数据库连接异常
class DBConnectionException(Exception):
    def __init__(self, message):
        self.message = message

# 从 CSV 文件中读取学生信息
def read_student_info_from_csv(filename):
    try:
        with open(filename, "r") as f:
            reader = csv.reader(f)
            student_info_list = []
            for row in reader:
                if len(row) != 3:
                    raise InvalidInputException("无效输入:行格式不正确")
                student_info_list.append(row)
            return student_info_list
    except FileNotFoundError:
        raise FileIOException(filename, "r")

# 将学生信息保存到 SQLite 数据库中
def save_student_info_to_db(dbname, student_info):
    try:
        conn = sqlite3.connect(dbname)
        c = conn.cursor()
        c.execute("CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT, gender TEXT, birthday TEXT)")
        c.executemany("INSERT INTO students(name, gender, birthday) values (?, ?, ?)", student_info)
        conn.commit()
        conn.close()
    except sqlite3.Error as e:
        raise DBConnectionException("数据库连接异常:{}".format(str(e)))

# 主函数
def main():
    try:
        student_info_list = read_student_info_from_csv("student_info.csv")
        save_student_info_to_db("student_info.db", student_info_list)
        print("学生信息保存成功!")
    except InvalidInputException as e:
        print("无效输入异常:{}".format(e.message))
    except FileIOException as e:
        print("文件读写异常:无法打开文件 {},模式为 {}".format(e.filename, e.mode))
    except DBConnectionException as e:
        print(e.message)

if __name__ == "__main__":
    main()

在上述代码中,我们定义了三个自定义异常类型 InvalidInputExceptionFileIOExceptionDBConnectionException,用于表示不同类型的异常。

在函数 read_student_info_from_csv 中,我们尝试从 CSV 文件中读取学生信息。如果读取过程中发现行格式不正确,则抛出 InvalidInputException 异常;如果文件不存在,则抛出 FileIOException 异常。

在函数 save_student_info_to_db 中,我们将读取到的学生信息保存到 SQLite 数据库中。如果连接数据库时出现异常,则抛出 DBConnectionException 异常。

在主函数中,我们使用 try-except 块捕获并处理不同类型的异常,以便更好地处理错误情况并提供有用的信息。

相关推荐

  1. Python程序异常处理解决方法

    2024-01-10 02:22:06       36 阅读
  2. Python 异常处理

    2024-01-10 02:22:06       45 阅读
  3. Python异常处理

    2024-01-10 02:22:06       25 阅读
  4. Python错误和异常处理

    2024-01-10 02:22:06       13 阅读
  5. Python异常处理

    2024-01-10 02:22:06       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 02:22:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 02:22:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 02:22:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 02:22:06       20 阅读

热门阅读

  1. TDengine的笔记

    2024-01-10 02:22:06       33 阅读
  2. C++_纯虚函数and抽象类

    2024-01-10 02:22:06       40 阅读
  3. pyDAL一个python的ORM(8) pyDAL的commit()方法

    2024-01-10 02:22:06       33 阅读
  4. 力扣232. 用栈实现队列

    2024-01-10 02:22:06       33 阅读
  5. K8S-环境部署

    2024-01-10 02:22:06       33 阅读
  6. OBD汽车

    OBD汽车

    2024-01-10 02:22:06      37 阅读
  7. Linux 专栏目录

    2024-01-10 02:22:06       48 阅读