python教程3

异常处理

python 异常处理机制

在 Python 中,当程序遇到一个错误(异常)时,它通常会立即停止执行,并生成一个错误消息。这是非常有用的,在开发阶段,这可以帮助我们理解什么地方出错以及为什么出错。然而,当我们希望程序在出错时能够继续执行,或者当我们希望生成更有用的错误消息时,我们需要使用异常处理。

为什么使用异常处理

异常处理的主要目的是增强程序的健壮性和错误处理能力。通过使用异常处理,程序可以在遇到错误时继续执行,而不是完全停止。此外,异常处理还允许程序生成更有用的错误消息,使得开发人员能够更容易地识别和修复问题。

异常处理的基本结构

Python 使用 try/except 语句进行异常处理。try 块包含可能引发异常的代码,except 块则包含当特定异常发生时应该执行的代码。

try:
    # 尝试执行的代码
    x = 1 / 0
except ZeroDivisionError:
    # 当 ZeroDivisionError 异常发生时执行的代码
    print("You can't divide by zero!")

你也可以使用 finally 关键字来指定无论是否发生异常都要执行的代码。

try:
    # 尝试执行的代码
    x = 1 / 0
except ZeroDivisionError:
    # 当 ZeroDivisionError 异常发生时执行的代码
    print("You can't divide by zero!")
finally:
    # 无论是否发生异常都会执行的代码
    print("This is the end of the try/except block.")

常见异常类型

Python 内置了很多异常类型,以下是一些常见的:

  • ZeroDivisionError:尝试除以零时引发。
  • TypeError:操作或函数应用于不适当类型的对象时引发。
  • IndexError:序列中没有此索引(index)时引发。
  • KeyError:字典中查找一个不存在的关键字时引发。
  • FileNotFoundError:请求的文件不存在时引发。
  • ValueError:操作或函数接收到具有正确类型但值不合适的参数时引发。

捕捉多个异常

在 Python 中,你可以捕捉多个异常,并对每种异常类型执行不同的操作。你只需要在 try 块后添加多个 except 块即可。

try:
    # 尝试执行的代码
    x = 1 / 0
except ZeroDivisionError:
    # 当 ZeroDivisionError 异常发生时执行的代码
    print("You can't divide by zero!")
except TypeError:
    # 当 TypeError 异常发生时执行的代码
    print("Invalid operation!")

except…as 与统一处理

你还可以使用 except...as 语法来捕捉异常并将其赋值给一个变量。这使得你可以在 except 块中访问到异常对象,从而进行更详细的错误处理。

try:
    # 尝试执行的代码
    x = 1 / 0
except ZeroDivisionError as e:
    # 当 ZeroDivisionError 异常发生时执行的代码
    print("Error:", e)

捕捉所有异常

如果你想捕捉所有类型的异常,你可以在 except 块中使用 BaseException 或者不指定异常类型。

try:
    # 尝试执行的代码
    x = 1 / 0
except:
    # 当任何异常发生时执行的代码
    print("An error occurred!")

异常处理结构的嵌套

你可以在一个 try/except 块中嵌套另一个 try/except 块,这样你可以对特定代码段进行更详细的异常处理。

try:
    # 尝试执行的代码
    x = 1 / 0
    try:
        # 尝试执行的代码
        y = x + 1
    except TypeError:
        # 当 TypeError 异常发生时执行的代码
        print("Invalid operation!")
except ZeroDivisionError:
    # 当 ZeroDivisionError 异常发生时执行的代码
    print("You can't divide by zero!")

try…finally 中止行为

finally 块中的代码总是在 try 块和 except 块之后执行,无论是否发生了异常。这对于确保资源被正确清理(如文件被关闭,连接被断开等)非常有用。

try:
    # 尝试执行的代码
    x = 1 / 0
except ZeroDivisionError:
    # 当 ZeroDivisionError 异常发生时执行的代码
    print("You can't divide by zero!")
finally:
    # 无论是否发生异常都会执行的代码
    print("This is the end of the try/except block.")

如果 tryexcept 块中有 returnbreakcontinue 语句,finally 块仍然会执行。

python 数据库编程

了解关系数据库

数据模型

关系数据库是基于关系模型的数据库,其中数据以表格的形式存储。在关系数据库中,数据被组织成一个或多个表,每个表包含多个行(记录)和列(字段)。这种表格形式的数据组织使得数据之间的关系可以通过键(key)来建立。

关系数据库的概念和特点

关系数据库是一种结构化数据存储方式,具有以下特点:

  • 数据的组织结构化:数据以表格的形式存储,每个表格有固定的列和数据类型。
  • 数据的关联性:不同表格之间可以通过键建立关联,实现数据的一致性和完整性。
  • 数据的查询和操作:通过 SQL(Structured Query Language)语言进行数据的查询、插入、更新和删除操作。
  • ACID 特性:关系数据库支持事务的 ACID 特性,确保数据的原子性、一致性、隔离性和持久性。

关系数据库语言 SQL

SQL(Structured Query Language)是用于管理关系数据库系统的标准化语言。SQL 可以用于执行各种操作,包括:

  • 数据查询:通过 SELECT 语句从数据库中检索数据。
  • 数据操作:通过 INSERT、UPDATE 和 DELETE 语句插入、更新和删除数据。
  • 数据定义:通过 CREATE、ALTER 和 DROP 语句定义和修改数据库对象,如表、索引等。
  • 数据控制:通过 GRANT 和 REVOKE 语句控制对数据库对象的访问权限。

SQL 是关系数据库管理系统(RDBMS)的核心语言,几乎所有主流的关系数据库系统都支持 SQL。通过 SQL,用户可以轻松地管理数据库、执行复杂的查询操作以及确保数据的完整性和安全性。

访问SQLite数据

了解 Python 的 SQL 接口

Python 提供了多种用于访问数据库的 SQL 接口,其中较为常用的包括 sqlite3SQLAlchemy 等。这些接口允许 Python 开发人员与各种数据库进行交互,执行查询、插入数据、更新数据等操作。

连接和创建 SQLite 数据库

在 Python 中,使用 sqlite3 包可以连接和操作 SQLite 数据库。要连接到 SQLite 数据库,可以使用以下代码:

import sqlite3

# 连接到 SQLite 数据库(如果数据库不存在,则会自动创建)
conn = sqlite3.connect('example.db')

创建表

要在 SQLite 数据库中创建表,可以执行类似以下的 SQL 命令:

# 创建一个名为 'users' 的表格
conn.execute('''CREATE TABLE users
             (id INT PRIMARY KEY NOT NULL,
             name TEXT NOT NULL,
             age INT NOT NULL)''')

添加记录

要向表中添加记录,可以使用 SQL 的 INSERT INTO 命令:

# 向 'users' 表中插入一条记录
conn.execute("INSERT INTO users (id, name, age) VALUES (1, 'Alice', 30)")

执行查询

执行查询可以使用 execute 方法,并通过 fetchall 获取结果:

# 执行查询
cursor = conn.execute("SELECT * FROM users")
rows = cursor.fetchall()

for row in rows:
    print(row)

使用事务

在 SQLite 中,可以使用事务来确保一组操作要么全部成功,要么全部失败。可以使用 commit 提交事务或 rollback 回滚事务:

# 开始事务
conn.execute("BEGIN TRANSACTION")

# 执行一系列操作

# 提交事务
conn.execute("COMMIT")

通过以上方法,可以在 Python 中连接、操作 SQLite 数据库,创建表,添加记录,执行查询以及使用事务来确保数据的一致性和完整性。

访问MySQL 数据库

下载安装 MySQL

若要在本地计算机上安装 MySQL 数据库,可以按照以下步骤进行:

  1. 访问 MySQL 官方网站(https://www.mysql.com/)并下载适合您操作系统的 MySQL 安装程序。
  2. 根据下载的安装程序指引,运行安装程序并按照提示完成 MySQL 数据库的安装过程。
  3. 在安装过程中,您可能需要设置数据库管理员(root)的密码以及其他配置选项。

SQLite 是一种轻量级的嵌入式关系数据库,无需独立的服务器进程,可以直接访问存储在单个磁盘文件中的数据库。

示例:

import sqlite3

# 连接到 SQLite 数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 执行 SQL 查询
cursor.execute("SELECT * FROM table_name")
rows = cursor.fetchall()

# 关闭连接
conn.close()

MySQL 是一种流行的开源关系数据库管理系统,通过 Python 的 MySQL 连接器可以访问 MySQL 数据库。

示例:

import mysql.connector

# 连接到 MySQL 数据库
conn = mysql.connector.connect(
    host="localhost",
    user="username",
    password="password",
    database="database_name"
)
cursor = conn.cursor()

# 执行 SQL 查询
cursor.execute("SELECT * FROM table_name")
rows = cursor.fetchall()

# 关闭连接
conn.close()

访问 Microsoft SQL Server 数据库

Microsoft SQL Server 是一种常用的商业关系数据库管理系统,通过 Python 的 pyodbc 模块可以连接到 SQL Server 数据库。

示例:

import pyodbc

# 连接到 SQL Server 数据库
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=server_name;DATABASE=database_name;UID=username;PWD=password')
cursor = conn.cursor()

# 执行 SQL 查询
cursor.execute("SELECT * FROM table_name")
rows = cursor.fetchall()

# 关闭连接
conn.close()

基于数据库的用户注册信息管理系统

可以使用关系数据库来存储用户注册信息,例如用户名、电子邮件等。通过 SQL 查询和操作,可以实现用户注册、登录和管理功能。

示例:

import sqlite3

class UserRegistrationSystem:
    def __init__(self, db_name):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()

    def register_user(self, username, email):
        self.cursor.execute("INSERT INTO users (username, email) VALUES (?, ?)", (username, email))
        self.conn.commit()

    def get_user(self, username):
        self.cursor.execute("SELECT * FROM users WHERE username=?", (username,))
        return self.cursor.fetchone()

    def close_connection(self):
        self.conn.close()

# 使用用户注册信息管理系统
registration_system = UserRegistrationSystem('user_database.db')
registration_system.register_user("Alice", "alice@example.com")
user = registration_system.get_user("Alice")
print(user)

registration_system.close_connection()

通过以上示例,可以实现基于数据库的用户注册信息管理系统,实现用户信息的存储和检索功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值