MST

星途 面试题库

面试题:Python finally 与自定义资源管理类

假设你创建了一个自定义的数据库连接类 `DatabaseConnection`,在类方法中使用 `try - except - finally` 结构管理数据库连接的获取与释放,同时在 `finally` 块中处理连接关闭可能引发的异常。请写出该类的完整代码实现,并说明这样设计的好处。
38.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class DatabaseConnection:
    def __init__(self, host, port, username, password, database):
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.database = database
        self.connection = None

    def get_connection(self):
        try:
            # 这里假设使用 pymysql 连接数据库,实际需要安装并引入相应库
            import pymysql
            self.connection = pymysql.connect(
                host=self.host,
                port=self.port,
                user=self.username,
                password=self.password,
                database=self.database
            )
            return self.connection
        except Exception as e:
            print(f"获取数据库连接时出错: {e}")
            return None

    def close_connection(self):
        if self.connection:
            try:
                self.connection.close()
            except Exception as e:
                print(f"关闭数据库连接时出错: {e}")

    def execute_query(self, query):
        try:
            connection = self.get_connection()
            if connection:
                cursor = connection.cursor()
                cursor.execute(query)
                result = cursor.fetchall()
                cursor.close()
                return result
        except Exception as e:
            print(f"执行查询时出错: {e}")
        finally:
            self.close_connection()


这样设计的好处:

  1. 异常处理全面try - except - finally 结构确保在获取连接和关闭连接过程中出现的异常都能被妥善处理,不至于程序因未捕获的异常而崩溃。在 try 块中尝试获取连接,except 块捕获并处理获取连接时可能出现的异常,在 finally 块中无论获取连接是否成功,都确保连接能被关闭,并且在关闭连接时如果出现异常也能被捕获处理。
  2. 资源管理清晰:明确的连接获取和释放逻辑,在获取连接失败时不会遗漏关闭连接的操作,避免资源泄露。同时,在执行完数据库操作后,finally 块保证连接能可靠关闭,确保数据库资源的合理使用。
  3. 代码可读性与维护性好:将数据库连接相关的操作封装在类中,结构清晰,每个方法的职责明确,便于后续代码的理解、扩展和维护。