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