MST
星途 面试题库

面试题:Python异常处理的嵌套与资源管理

假设你有一个需要进行复杂数据库操作的Python程序,其中涉及连接数据库、执行查询、获取结果并关闭连接的过程。在每一步都可能发生不同类型的异常,例如数据库连接失败、查询语法错误、结果集处理错误等。请使用合适的异常处理机制,确保在发生任何异常时,数据库连接都能正确关闭,并且根据不同的异常类型给出有针对性的错误提示。
11.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import sqlite3


def complex_db_operation():
    try:
        # 连接数据库
        conn = sqlite3.connect('example.db')
        cursor = conn.cursor()
        try:
            # 执行查询
            cursor.execute('SELECT * FROM non_existent_table')
            # 获取结果
            results = cursor.fetchall()
            for row in results:
                print(row)
        except sqlite3.OperationalError as e:
            print(f"查询语法错误: {e}")
        except Exception as e:
            print(f"结果集处理错误: {e}")
        finally:
            # 关闭连接
            conn.close()
    except sqlite3.Error as e:
        print(f"数据库连接失败: {e}")


if __name__ == "__main__":
    complex_db_operation()
  1. 外层try - except:主要捕获数据库连接失败的异常。如果在sqlite3.connect('example.db')这一步出现错误,会进入except sqlite3.Error as e块,打印出“数据库连接失败: ”以及具体的错误信息。
  2. 内层try - except - finally
    • 内层try:执行数据库查询并获取结果。
    • 内层except sqlite3.OperationalError as e:捕获查询语法错误,OperationalError通常在SQL语句有语法问题时抛出,这里打印“查询语法错误: ”以及具体错误信息。
    • 内层except Exception as e:捕获其他可能在结果集处理过程中出现的错误,打印“结果集处理错误: ”以及具体错误信息。
    • 内层finally:无论内层try块中是否发生异常,都会执行conn.close()关闭数据库连接,确保数据库连接正确关闭。