本文系统梳理 Python 入门阶段的核心知识点,涵盖 Python 语言简介、开发环境搭建、语法元素(输出/输入/变量/数据类型/注释)以及程序控制语句(条件判断/循环/异常处理),配合大量代码示例,适合零基础同学快速入门,也方便复习查阅。
一、初识 Python
1.1 认识 Python 语言
1.1.1 编程语言概述
编程语言(Programming Language)是人与计算机沟通的桥梁,通过特定的语法规则编写指令,让计算机完成指定任务。编程语言大致分为:
- 机器语言:由 0 和 1 组成,计算机直接执行,但人类难以阅读。
- 汇编语言:用助记符代替二进制,仍与硬件强相关。
- 高级语言:接近自然语言,可读性强,如 Python、Java、C++ 等。高级语言需要通过编译或解释转换为机器可执行的代码。
为了更清晰地理解三类编程语言的区别,下表从执行方式、可读性、开发效率和典型代表四个方面进行对比:
| 机器语言 | 计算机直接执行(二进制指令) | 极差(0/1 序列) | 极低(需逐位编写) | 无特定名称,即 CPU 指令集 |
| 汇编语言 | 通过汇编器转换为机器语言 | 较差(助记符,仍接近硬件) | 较低(需了解硬件细节) | x86 汇编、ARM 汇编 |
| 高级语言(编译型) | 通过编译器一次性转换为机器语言后执行 | 好(接近自然语言) | 高(抽象程度高) | C、C++、Go、Rust |
| 高级语言(解释型) | 通过解释器逐行解释执行 | 好(接近自然语言) | 高(无需编译,跨平台强) | Python、JavaScript、Ruby、PHP |
补充说明:
- 编译型语言:程序运行前需要专门的编译过程,将源代码一次性转换为机器码(可执行文件)。执行速度快,但跨平台性较差(不同平台需重新编译)。
- 解释型语言:程序运行时由解释器逐行解释执行,无需提前编译。便于调试和跨平台,但通常执行速度慢于编译型语言。
- 混合型语言:部分语言(如 Java、C#)采用“编译为中间码 + 虚拟机解释/即时编译”的方式,兼具编译和解释的特点。
Python 属于解释型高级语言,它通过解释器逐行执行,无需编译,因此开发调试非常便捷,尤其适合初学者和快速原型开发。
1.1.2 Python 语言概述
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言,由 Guido van Rossum 于 1989 年底发明。它的核心特点:
- 语法简洁:代码像英语一样易读,适合初学者。
- 开源免费:任何人都可以自由使用和分发。
- 跨平台:支持 Windows、macOS、Linux 等主流操作系统。
- 丰富的库:拥有庞大的标准库和第三方生态,覆盖 Web、人工智能、数据分析、自动化等领域。
- 解释执行:无需编译,写完即可运行,便于调试。
1.1.3 Python 语言的发展
Python 自 1991 年正式发布以来经历了多个大版本演进,目前广泛使用的是 Python 3.x 系列(Python 2 已于 2020 年停止维护)。凭借在人工智能、数据科学、自动化测试等领域的强劲表现,Python 长期位居各大编程语言排行榜前列。
1.2 搭建 Python 开发环境
1.2.1 在 Windows 系统中搭建开发环境
若正确显示版本号(如 `Python 3.12.0`),则说明安装成功。
#### 1.2.2 在 macOS 系统中搭建开发环境
macOS 自带 Python 2,建议通过 Homebrew 安装最新版 Python 3,或者从 Python 官网([https://www.python.org/downloads/](https://www.python.org/downloads/))下载 macOS 安装包:
```bash
brew install python
安装完成后验证:
python3 –version
1.3 第一个 Python 程序
1.3.1 认识 IDLE
IDLE(Integrated Development and Learning Environment)是 Python 自带的轻量级集成开发与学习环境,安装 Python 后即可使用。它包含:
- 交互式解释器(REPL):输入一行代码立即看到结果,适合快速试验。
- 文件编辑器:编写多行脚本并保存为 .py 文件后运行。
1.3.2 实现 hello world 程序
在 IDLE 交互模式中直接输入:
print("hello world")
运行结果:
hello world
也可以将代码保存为 hello.py 文件,通过命令行运行:
python hello.py
1.3.3 程序运行出现异常
程序在运行过程中如果遇到错误,Python 会抛出**异常(Exception)**并打印出错信息。例如:
print(1 / 0)
运行结果:
ZeroDivisionError: division by zero
异常信息通常包含:异常类型 + 错误描述 + 出错位置(文件名与行号),学会阅读异常信息是排错的关键。
1.2.3 环境配置与验证
安装完成后,建议进行以下环境配置,确保 Python 能正常工作:
1. 验证安装与版本 在命令行中运行以下命令,确认 Python 已正确安装并查看版本:
# Windows 和 macOS 通用
python –version
# 或
python3 –version
如果显示类似 Python 3.12.0 的信息,说明安装成功。
2. 配置 PATH 环境变量 PATH 环境变量告诉系统在哪里查找可执行文件。安装时勾选「Add Python to PATH」(Windows)或通过 Homebrew 安装(macOS)通常会自动配置。
验证 PATH 是否包含 Python:
- Windows:在命令行输入 where python 或 where python3
- macOS/Linux:在终端输入 which python 或 which python3
如果显示 Python 安装路径(如 C:\\Python312\\python.exe 或 /usr/local/bin/python3),则 PATH 配置正确。
手动配置 PATH 环境变量(如果需要):
Windows 系统:
macOS/Linux 系统:
export PATH="/usr/local/opt/python@3.12/bin:$PATH"
3. 运行 Python 交互模式 在命令行输入 python(或 python3)进入交互式解释器(REPL):
python
出现 >>> 提示符表示成功进入,可以输入简单命令测试:
>>> print("Hello, Python!")
Hello, Python!
>>> exit() # 退出交互模式
4. 创建和运行 Python 脚本
如果输出 Hello from script!,说明环境配置完成。
5. 安装包管理器 pip pip 是 Python 的包管理工具,用于安装第三方库。通常随 Python 一起安装。
验证 pip 是否可用:
pip –version
# 或
pip3 –version
如果提示命令不存在,需要单独安装:
- Windows:安装 Python 时确保勾选「Install pip」
- macOS:brew install python 会包含 pip
- 通用方法:下载 get-pip.py 并运行 python get-pip.py
6. 创建虚拟环境(推荐) 虚拟环境可以为每个项目创建独立的 Python 环境,避免包冲突。
创建虚拟环境:
# 进入项目目录
cd my_project
# 创建虚拟环境
python -m venv venv
激活虚拟环境:
- Windows:venv\\Scripts\\activate
- macOS/Linux:source venv/bin/activate
激活后,命令行提示符前会显示 (venv),表示已进入虚拟环境。使用 deactivate 退出。
常见问题排查:
- “python” 不是内部或外部命令:PATH 环境变量未配置,需要按照上述步骤手动添加 Python 安装目录到 PATH。
- 命令找不到:尝试使用 python3 和 pip3 代替 python 和 pip。
- 权限问题:在 macOS/Linux 上使用 sudo 或在 Windows 上以管理员身份运行。
- 多个 Python 版本冲突:使用 python3 明确指定 Python 3 版本,或使用虚拟环境隔离。
完成以上配置后,你的 Python 开发环境就准备就绪了,可以开始编写和运行 Python 程序。
1.4 Python 语言代码的特点
- 使用缩进(而非大括号)表示代码块,一般推荐 4 个空格。
- 无需声明变量类型,赋值即定义。
- 语句末尾不需要分号(一行写一条语句)。
- 大小写敏感,Name 与 name 是两个不同的标识符。
- 支持面向对象和函数式编程风格。
二、Python 语法元素
2.1 输出函数 print()
2.1.1 函数
函数是完成特定功能的代码集合,Python 通过「函数名 + 括号」的方式调用,括号内可传入参数。例如 print("hello") 中,print 是函数名,"hello" 是参数。
2.1.2 print() 函数
print() 是 Python 中最常用的输出函数,用于将内容打印到控制台。
基本用法:
print("hello world") # 输出字符串
print(2026) # 输出整数
print(3.14) # 输出浮点数
输出多个值(默认用空格分隔):
print("姓名:", "张三", "年龄:", 18)
# 输出: 姓名: 张三 年龄: 18
使用 sep 参数自定义分隔符:
print("2026", "07", "13", sep="-")
# 输出: 2026-07-13
使用 end 参数控制结尾符(默认换行 \\n):
print("加载中", end="")
print("…100%")
# 输出: 加载中…100%
格式化输出:
# f-string(推荐,Python 3.6+)
name = "Python"
version = 3.12
print(f"{name} {version}") # 输出: Python 3.12
# format 方法
print("{} {}".format(name, version))
# % 占位符
print("%s %.2f" % (name, version))
2.2 元素的命名
2.2.1 变量的命名规则
变量名是程序中存储数据的"容器",命名需遵守以下规则:
- 只能由字母、数字、下划线组成。
- 不能以数字开头。
- 不能使用关键字(如 if、for、while、class 等)。
- 区分大小写。
- 见名知意,推荐使用 snake_case(小写下划线)风格。
# 合法命名
user_name = "Tom"
_age = 18
score1 = 95.5
# 非法命名(会报错)
# 1name = "Tom" # 不能以数字开头
# my-name = "Tom" # 不能包含连字符
# if = 10 # 不能使用关键字
2.2.2 赋值语句
通过 = 将右侧的值赋给左侧的变量:
a = 10
b = a + 5
print(b) # 15
# 多重赋值
x, y, z = 1, 2, 3
print(x, y, z) # 1 2 3
# 链式赋值
m = n = 100
print(m, n) # 100 100
2.3 基本数据类型
2.3.1 数据类型的介绍
Python 常见基本数据类型:
| 整数 | int | 10, -5, 0 | 不带小数点的数 |
| 浮点数 | float | 3.14, -0.5 | 带小数点的数 |
| 字符串 | str | "hello", 'a' | 用引号包裹的文本 |
| 布尔值 | bool | True, False | 真假值,首字母大写 |
age = 18 # int
height = 1.75 # float
name = "Python" # str
is_student = True # bool
2.3.2 检测数据类型
使用 type() 函数查看变量类型:
print(type(18)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("hello")) # <class 'str'>
print(type(True)) # <class 'bool'>
使用 isinstance() 判断变量是否为某类型:
print(isinstance(18, int)) # True
print(isinstance("hi", str)) # True
2.3.3 强制转换数据类型
通过类型构造函数进行转换:
# 字符串 -> 整数
num = int("123")
print(type(num), num) # <class 'int'> 123
# 整数 -> 字符串
s = str(100)
print(type(s), s) # <class 'str'> 100
# 整数 -> 浮点数
f = float(5)
print(f) # 5.0
# 浮点数 -> 整数(直接截断小数部分)
n = int(3.99)
print(n) # 3
注意:int("abc") 会抛出 ValueError,因为 “abc” 无法转为整数。
2.3.4 报错信息分析
常见类型相关错误:
# TypeError:类型不支持的操作
print("年龄:" + 18)
# TypeError: can only concatenate str (not "int") to str
# 解决方案:将数字转为字符串
print("年龄:" + str(18))
阅读报错信息的技巧:先看异常类型,再看错误描述,最后定位出错行号。
2.3.5 多行处理
当一行代码过长时,可使用反斜杠 \\ 续行,或用括号隐式续行:
# 反斜杠续行
total = 1 + 2 + 3 + \\
4 + 5 + 6
print(total) # 21
# 括号内可换行(推荐)
result = (1 + 2 + 3 +
4 + 5 + 6)
print(result) # 21
多行字符串使用三引号:
text = """这是
多行
字符串"""
print(text)
2.4 输入函数 input()
input() 用于从键盘接收用户输入,返回值始终是字符串类型:
name = input("请输入你的名字:")
print("你好," + name)
若需要数值参与运算,必须先转换类型:
age_str = input("请输入年龄:")
age = int(age_str) # 转为整数
print("明年你", age + 1, "岁")
一行简写:
age = int(input("请输入年龄:"))
2.5 注释和"使用帮助"功能
2.5.1 注释功能
注释是写给开发者看的说明文字,不会被程序执行。
# 这是单行注释
"""
这是多行注释
可以写多行说明
"""
age = 18 # 行尾注释:定义年龄变量
良好的注释习惯能让代码更易维护,但也不要过度注释显而易见的代码。
2.5.2 "使用帮助"功能
在交互模式中,可使用 help() 函数查看任意对象或函数的帮助文档:
help(print) # 查看 print 函数的用法
help(str) # 查看字符串类型的所有方法
也可以在函数定义中编写文档字符串(docstring),供 help() 调用:
def greet(name):
"""向指定的人打招呼"""
print("hello, " + name)
help(greet)
项目案例:实现计算器
综合运用输入输出与类型转换,实现一个简易计算器:
a = float(input("请输入第一个数:"))
op = input("请输入运算符(+ – * /):")
b = float(input("请输入第二个数:"))
if op == "+":
print(a + b)
elif op == "-":
print(a – b)
elif op == "*":
print(a * b)
elif op == "/":
print(a / b)
else:
print("不支持的运算符")
三、程序控制语句
3.1 条件判断语句
3.1.1 if 语句
if 语句用于在满足条件时执行某段代码:
age = 18
if age >= 18:
print("已成年")
注意:条件后必须有冒号 :,代码块通过缩进表示,建议统一使用 4 个空格。
3.1.2 布尔值
条件表达式的结果为布尔值 True 或 False。常见比较运算符:
| == | 等于 | a == b |
| != | 不等于 | a != b |
| > | 大于 | a > b |
| < | 小于 | a < b |
| >= | 大于等于 | a >= b |
| <= | 小于等于 | a <= b |
逻辑运算符用于组合多个条件:
# and(与):两个条件都为 True 才为 True
# or(或):任一条件为 True 即为 True
# not(非):取反
print(True and False) # False
print(True or False) # True
print(not True) # False
3.1.3 if + else 语句
else 在条件不成立时执行:
age = 16
if age >= 18:
print("已成年")
else:
print("未成年")
3.1.4 if + elif + else 语句
elif(else if)用于判断多个互斥条件:
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
3.1.5 多个 elif 语句
可以根据需要添加任意多个 elif,程序按从上到下顺序匹配,命中第一个满足条件的分支后不再继续判断:
weekday = 3
if weekday == 1:
print("星期一")
elif weekday == 2:
print("星期二")
elif weekday == 3:
print("星期三")
elif weekday == 4:
print("星期四")
elif weekday == 5:
print("星期五")
else:
print("周末")
3.1.6 条件判断语句的嵌套
if 内部可以再嵌套 if,处理更复杂的逻辑:
age = 20
has_ticket = True
if age >= 18:
if has_ticket:
print("允许入场")
else:
print("未成年需购票")
else:
print("未成年人禁止入场")
3.1.7 多个条件判断语句
使用 and、or 组合多个条件,避免过深的嵌套:
age = 25
gender = "男"
if age >= 22 and gender == "男":
print("达到法定结婚年龄")
elif age >= 20 and gender == "女":
print("达到法定结婚年龄")
else:
print("未达到法定结婚年龄")
3.1.8 if + else 语句的复合写法
对于简单的条件赋值,可使用三元表达式(条件表达式)让代码更简洁:
# 普通写法
if age >= 18:
status = "成年"
else:
status = "未成年"
# 三元表达式(等价)
status = "成年" if age >= 18 else "未成年"
3.1.9 if-elif-else 执行流程图
为了更直观地理解 if-elif-else 语句的执行逻辑,下面通过流程图展示程序如何从上到下判断条件并选择分支:
#mermaid-svg-aZCsDV4Oa02jBDOy{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aZCsDV4Oa02jBDOy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aZCsDV4Oa02jBDOy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aZCsDV4Oa02jBDOy .error-icon{fill:#552222;}#mermaid-svg-aZCsDV4Oa02jBDOy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aZCsDV4Oa02jBDOy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aZCsDV4Oa02jBDOy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aZCsDV4Oa02jBDOy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aZCsDV4Oa02jBDOy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aZCsDV4Oa02jBDOy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aZCsDV4Oa02jBDOy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aZCsDV4Oa02jBDOy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aZCsDV4Oa02jBDOy .marker.cross{stroke:#333333;}#mermaid-svg-aZCsDV4Oa02jBDOy svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aZCsDV4Oa02jBDOy p{margin:0;}#mermaid-svg-aZCsDV4Oa02jBDOy .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-aZCsDV4Oa02jBDOy .cluster-label text{fill:#333;}#mermaid-svg-aZCsDV4Oa02jBDOy .cluster-label span{color:#333;}#mermaid-svg-aZCsDV4Oa02jBDOy .cluster-label span p{background-color:transparent;}#mermaid-svg-aZCsDV4Oa02jBDOy .label text,#mermaid-svg-aZCsDV4Oa02jBDOy span{fill:#333;color:#333;}#mermaid-svg-aZCsDV4Oa02jBDOy .node rect,#mermaid-svg-aZCsDV4Oa02jBDOy .node circle,#mermaid-svg-aZCsDV4Oa02jBDOy .node ellipse,#mermaid-svg-aZCsDV4Oa02jBDOy .node polygon,#mermaid-svg-aZCsDV4Oa02jBDOy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aZCsDV4Oa02jBDOy .rough-node .label text,#mermaid-svg-aZCsDV4Oa02jBDOy .node .label text,#mermaid-svg-aZCsDV4Oa02jBDOy .image-shape .label,#mermaid-svg-aZCsDV4Oa02jBDOy .icon-shape .label{text-anchor:middle;}#mermaid-svg-aZCsDV4Oa02jBDOy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aZCsDV4Oa02jBDOy .rough-node .label,#mermaid-svg-aZCsDV4Oa02jBDOy .node .label,#mermaid-svg-aZCsDV4Oa02jBDOy .image-shape .label,#mermaid-svg-aZCsDV4Oa02jBDOy .icon-shape .label{text-align:center;}#mermaid-svg-aZCsDV4Oa02jBDOy .node.clickable{cursor:pointer;}#mermaid-svg-aZCsDV4Oa02jBDOy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aZCsDV4Oa02jBDOy .arrowheadPath{fill:#333333;}#mermaid-svg-aZCsDV4Oa02jBDOy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aZCsDV4Oa02jBDOy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aZCsDV4Oa02jBDOy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aZCsDV4Oa02jBDOy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aZCsDV4Oa02jBDOy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aZCsDV4Oa02jBDOy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aZCsDV4Oa02jBDOy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aZCsDV4Oa02jBDOy .cluster text{fill:#333;}#mermaid-svg-aZCsDV4Oa02jBDOy .cluster span{color:#333;}#mermaid-svg-aZCsDV4Oa02jBDOy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aZCsDV4Oa02jBDOy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aZCsDV4Oa02jBDOy rect.text{fill:none;stroke-width:0;}#mermaid-svg-aZCsDV4Oa02jBDOy .icon-shape,#mermaid-svg-aZCsDV4Oa02jBDOy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aZCsDV4Oa02jBDOy .icon-shape p,#mermaid-svg-aZCsDV4Oa02jBDOy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aZCsDV4Oa02jBDOy .icon-shape .label rect,#mermaid-svg-aZCsDV4Oa02jBDOy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aZCsDV4Oa02jBDOy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aZCsDV4Oa02jBDOy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aZCsDV4Oa02jBDOy :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
条件为 True
条件为 False
条件为 True
条件为 False
条件为 True
条件为 False
是
否(还有更多 elif)
开始执行 if-elif-else 语句
判断第一个 if 条件
执行 if 代码块
结束整个条件判断(后续 elif/else 不再判断)
判断第一个 elif 条件
执行该 elif 代码块
判断下一个 elif 条件(如有更多)
执行该 elif 代码块
所有条件都为 False?
执行 else 代码块
流程图说明:
关键特点:
- 顺序性:条件按书写顺序从上到下判断。
- 互斥性:只会执行第一个满足条件的代码块。
- 可选的 else:else 是可选的,当所有条件都不满足时执行。
- 效率考虑:将最可能成立的条件放在前面可以提高程序效率。
3.2 循环语句
3.2.1 for 循环
for 循环用于遍历可迭代对象(如字符串、列表、range 等):
# 遍历字符串
for ch in "Python":
print(ch)
# 配合 range() 生成数字序列
for i in range(5): # 0 1 2 3 4
print(i)
for i in range(1, 6): # 1 2 3 4 5
print(i)
for i in range(0, 10, 2): # 0 2 4 6 8(步长为2)
print(i)
range(start, stop, step):包含 start,不包含 stop,step 为步长。
3.2.2 while 循环
while 在条件为 True 时重复执行代码块,需注意更新循环变量,否则会陷入死循环:
n = 1
while n <= 5:
print(n)
n += 1 # 别忘了更新变量!
print("循环结束")
3.2.3 嵌套循环
循环内部再嵌套循环,常用于处理二维结构(如乘法表):
# 九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\\t")
print() # 每行结束后换行
输出(部分):
1×1=1
1×2=22×2=4
1×3=32×3=63×3=9
…
3.2.4 break 和 continue 语句
- break:立即终止当前整个循环。
- continue:跳过本次循环
3.3 异常处理
在程序运行过程中,难免会遇到各种错误(如除零、文件不存在、类型错误等)。Python 使用异常处理机制来捕获并处理这些错误,防止程序意外崩溃,并给出友好的错误提示。
3.3.1 try-except 基本语法与示例
try-except 是异常处理的基本结构。将可能出错的代码放在 try 块中,如果发生异常,则执行 except 块中的代码。
try:
# 可能出错的代码
result = 10 / 0
print("结果:", result)
except:
# 发生任何异常时执行的代码
print("出错了!")
以上代码会输出“出错了!”,而不会因为除零错误导致程序崩溃。这比之前 1.3.3 节中直接运行 print(1 / 0) 导致程序中断要友好得多。
3.3.2 捕获特定异常
可以指定要捕获的异常类型,从而对不同错误进行不同的处理。
try:
num = int(input("请输入一个整数: "))
result = 10 / num
print("10 除以 {} 的结果是: {}".format(num, result))
except ZeroDivisionError:
print("错误:除数不能为零!")
except ValueError:
print("错误:请输入有效的整数!")
except Exception as e:
print("发生了未知错误:", e)
- ZeroDivisionError:捕获除零错误。
- ValueError:捕获 int() 转换失败的错误(例如输入了字母)。
- Exception:捕获所有其他异常,as e 可以获取异常对象。
3.3.3 try-except-else-finally 完整结构
完整的异常处理结构还包括 else 和 finally 子句。
try:
file = open("data.txt", "r")
content = file.read()
number = int(content.strip())
result = 100 / number
except FileNotFoundError:
print("错误:文件不存在!")
except ValueError:
print("错误:文件内容不是有效的数字!")
except ZeroDivisionError:
print("错误:文件中的数字不能为零!")
else:
# 只有当 try 块中没有发生异常时才会执行
print("计算成功,结果是:", result)
finally:
# 无论是否发生异常,最终都会执行(常用于清理资源,如关闭文件)
print("程序执行完毕。")
# 确保文件被关闭
if 'file' in locals():
file.close()
- try:包裹可能出错的代码。
- except:捕获并处理特定异常。
- else:当 try 块没有异常时执行。
- finally:无论是否发生异常,最终都会执行,常用于释放资源(如关闭文件、网络连接)。
3.3.4 抛出异常(raise)
除了捕获异常,我们还可以使用 raise 语句主动抛出异常,通常用于参数检查或自定义错误逻辑。
def calculate_bmi(weight, height):
"""计算身体质量指数 (BMI)"""
if weight <= 0 or height <= 0:
# 如果参数不合法,主动抛出 ValueError 异常
raise ValueError("体重和身高必须为正数!")
bmi = weight / (height ** 2)
return bmi
# 测试
try:
# 正常情况
print(calculate_bmi(70, 1.75))
# 异常情况
print(calculate_bmi(–5, 1.75))
except ValueError as e:
print("输入错误:", e)
运行结果:
22.857142857142858
输入错误:体重和身高必须为正数!
主动抛出异常的好处:
总结: 异常处理是编写健壮程序的关键。通过 try-except 可以优雅地处理运行时错误;通过 else 和 finally 可以完善处理逻辑和资源管理;通过 raise 可以主动报告错误。结合 1.3.3 节中提到的阅读异常信息的技巧,你将能更好地调试和优化自己的程序。
四、总结与展望
4.1 本文核心内容回顾
本文系统梳理了 Python 入门阶段的核心知识点,旨在为零基础学习者构建一个清晰的知识框架:
- 输出与输入:print() 函数格式化输出,input() 函数获取用户输入。
- 变量与命名:变量的命名规则与赋值语句。
- 基本数据类型:int, float, str, bool 四种类型及其转换、检测方法。
- 注释与帮助:编写代码注释和使用 help() 获取文档。
- 条件判断:使用 if, elif, else 实现分支选择。
- 循环:使用 for 和 while 实现重复执行,并了解 break 与 continue 控制循环。
- 异常处理:使用 try-except-else-finally 结构优雅地捕获和处理运行时错误,并使用 raise 主动抛出异常。
通过贯穿全文的代码示例和最后的计算器项目,你已经将输入、输出、类型转换、条件判断等知识串联起来,完成了第一个综合性练习。
4.2 下一步学习建议
掌握上述基础后,你可以继续深入 Python 世界,探索更强大的功能:
数据结构:
- 列表(List) 和 元组(Tuple):用于存储一系列有序的元素。
- 字典(Dictionary) 和 集合(Set):用于存储键值对和无序不重复元素。
- 学习它们的创建、增删改查、遍历以及常用方法。
函数:
- 学习如何定义函数(def),使用参数和返回值来封装可重用的代码块。
- 理解变量的作用域(全局变量、局部变量)。
- 了解 lambda 表达式(匿名函数)。
模块与包:
- 学习如何使用 import 导入 Python 标准库(如 math, random, datetime)和第三方库。
- 了解如何创建和使用自己的模块(.py 文件)和包。
面向对象编程(OOP):
- 理解 类(Class) 和 对象(Object) 的概念。
- 学习定义类、__init__ 方法(构造函数)、属性和方法。
- 了解面向对象的三大特性:封装、继承、多态。
文件操作:
- 学习使用 open() 函数读写文本文件('r', 'w', 'a' 模式)。
4.3 练习项目与学习资源推荐
建议练习项目(由易到难):
学习资源推荐:
- 官方文档:docs.python.org – 最权威的参考,适合查阅。
- 在线教程:
- 菜鸟教程(Python3):中文,实例丰富,适合快速查阅。
- 廖雪峰的 Python 教程:逻辑清晰,循序渐进。
- 实践平台:
- LeetCode(力扣) / 牛客网:从简单难度开始,刷题巩固语法和算法思维。
- Codewars:通过完成小型“卡塔”(挑战)来提升编程技能。
保持学习的秘诀:
- 多写代码:编程是实践技能,光看不动手很难进步。
- 多读代码:阅读优秀的开源项目代码,学习别人的思路和写法。
- 善用搜索:遇到错误信息,直接复制到搜索引擎(如 Google、Stack Overflow),你遇到的问题很可能别人已经解决过。
Python 的世界广阔而精彩,从自动化脚本、数据分析、Web 开发到人工智能,它几乎无处不在。希望本文为你打开了这扇大门,祝你学习愉快,编程之路越走越宽广!






