Python 流程控制与异常处理笔记:break、continue、pass、return 与 try-except-finally

break

作用:用于循环控制,立即退出当前循环(只影响当前循环),继续执行后面和当前循环平级的代码,(使用心得:当你找到想要的东西时,用 break)

比如嵌套For循环的情况下,就退出当前For循环,当前For循环是外层循环就退出外层循环,当前For循环是内层循环就退出内层循环,然后继续执行后面和当前的For平级的代码

continue

作用:不退出当前循环,只是跳过当前循环的当前一轮剩下的代码,直接开始当前循环的下一轮(使用心得:当你想跳过某些不想要的东西时,用 continue)

pass

作用:是一个空操作语句,当它被执行时,什么都不发生。它主要用于语法上需要语句但程序不需要任何操作的地方。

用 pass 当你需要"这里应该有代码,但现在什么都不做"

return

作用:用于函数控制,立即退出整个函数,影响整个函数

比如函数有嵌套For循环的情况下,就算return在内层循环,也退出整个函数

备注:return 只能写在函数里。如果return直接写在模块顶层(不在任何 def 里面),Python 在编译阶段就会报 SyntaxError: 'return' outside function

break 和 continue两者的区别示例

python 复制代码
print("=== break 示例 ===")
for i in range(1, 6):
    if i == 3:
        print(f" break 示例 遇到 {i},break 示例 退出循环")
        break  # 完全退出循环
    print(f"当前数字: {i}")
print("=== break 循环结束 ===")
print("=====================")
print("=== continue 示例 ===")
for i in range(1, 6):
    if i == 3:
        print(f" continue 示例 遇到 {i},continue 示例 跳过 {i},继续下一个循环")
        continue  # 跳过这次迭代,继续下一次
    print(f"当前数字: {i}")
print("=== continue 循环结束 ===")

输出结果:
=== break 示例 ===
当前数字: 1
当前数字: 2
 break 示例 遇到 3,break 示例 退出循环
=== break 循环结束 ===
=====================
=== continue 示例 ===
当前数字: 1
当前数字: 2
 continue 示例 遇到 3,continue 示例 跳过 3,继续下一个循环
当前数字: 4
当前数字: 5
=== continue 循环结束 ===

continue和pass两者的区别示例

python 复制代码
for i in range(3):
    if i == 1:
        pass  # 当i等于1时,什么都不做,继续执行剩下的代码print
    print(i)
print('--')
for i in range(3):
    if i == 1:
        continue  # 跳过当前循环的i=1的这一轮,不执行这一轮剩下的代码print,直接开始当前循环的下一轮i=2
    print(i)
    
输出结果:
0
1
2
--
0
2

break 和 return两者的区别示例

python 复制代码
def nested_break():
    print("=== 嵌套循环 break ===")
    for i in range(3):
        for j in range(3):
            if j == 1:
                break  # 只退出内层循环
            print(f"i={i}, j={j}")
        print(f"外层循环继续: i={i}")
    print("=== 嵌套循环 break ===")
def nested_return():
    print("=== 嵌套循环 return ===")
    for i in range(3):
        for j in range(3):
            if j == 1:
                return  # 退出整个函数
            print(f"i={i}, j={j}")
        print("这行不会执行,后面的代码也不会执行")
    print("=== 嵌套循环 return ===")
nested_break()
nested_return()

输出结果:
=== 嵌套循环 break ===
i=0, j=0
外层循环继续: i=0
i=1, j=0
外层循环继续: i=1
i=2, j=0
外层循环继续: i=2
=== 嵌套循环 break ===
=== 嵌套循环 return ===
i=0, j=0

try-except:

目的:用于捕获和处理异常,会阻止异常传播,防止程序因未处理的异常而崩溃。

当 try 块中的代码抛出的异常被 except 成功捕获时(不管 except 块里是否做了处理动作,哪怕是 pass),程序都不崩溃,会跳过 try 中出错行之后的代码,转而执行 except 块;except 块执行完后,程序从它后面继续往下走;如果 except 块自身又抛出异常,程序仍会崩溃。

总而言之就是:try 块出错了,程序不会直接崩溃,而是跳到 except 块里执行,由 except 负责应对这个异常。

逻辑:try有异常并被except成功捕获 → 异常不再抛出→ except 块执行 → except之后的代码继续执行 → 程序不崩溃

逻辑:try有异常且没有被except成功捕获 → except 块不执行 → 异常继续抛出 → 程序崩溃

逻辑:try没有异常 → except 块不执行 → except之后的代码继续执行 → 程序不崩溃

成功捕获的理解:如果try-except KeyboardInterrupt的try块中的代码行有10/0,那么就不是成功捕获,把KeyboardInterrupt改成Exception或ZeroDivisionError,才能成功捕获异常

BaseException 是 Python 内置的"异常根类",不需要定义,Exception、SystemExit(程序退出)、KeyboardInterrupt(Ctrl+C)、GeneratorExit 直接继承自 BaseException,所以 except BaseException 能捕获 Ctrl+C 和程序退出信号。

Exception 是 Python 内置的"异常基类",不需要定义,ZeroDivisionError、ValueError、TypeError 都直接或间接继承自 Exception;所以 except Exception 能捕获常规错误,但捕获不到Ctrl+C(KeyboardInterrupt) 和 程序退出(SystemExit)信号。

BaseException 是全抓,连 Ctrl+C 都不放过;Exception 是只抓常规错误,放过 Ctrl+C 和程序退出。 日常写 try...except 请用 Exception,不要用 BaseException,否则用户按 Ctrl+C 想中断程序,会触发 KeyboardInterrupt,结果被except BaseException 成功捕获,不会继续抛出,except 块执行完后,程序继续往下执行,程序停不下来,只能强杀进程。

try-finally:

目的:保证 finally 块(通常用于收尾工作如关闭文件、释放锁、断开连接等)一定执行,但不捕获异常也不处理异常。无论 try 中的代码是否抛出异常,finally 块都会执行。如果 try 中抛出了异常,finally 执行完后异常会继续抛出,程序崩溃,finally 之后的代码不会执行;如果 try 中没有异常,程序正常执行 finally 之后继续往下执行

逻辑:try有异常时 → finally 照样执行 → 异常继续抛出 → 程序崩溃

逻辑:try无异常时 → finally 执行完 → 程序正常继续

try-except-finally:

目的是既捕获并处理异常,又保证finally 块(通常用于收尾工作如关闭文件、释放锁、断开连接等)一定执行。当 try 块中的代码抛出的异常被某个 except 成功捕获时,程序不崩溃,会跳过 try 中出错行之后的代码,转而执行匹配的 except 块,except 块自身不抛出异常的话,except 块执行完后继续执行finally 块,finally 块执行完后,程序从 finally 之后继续往下执行;如果 except 块自身又抛出异常,finally 块同样会执行,finally 块执行完后异常继续抛出,程序崩溃。如果 try 中的异常没有被任何 except 匹配到,则 except 块不执行,但 finally 块仍然执行,执行完后异常继续抛出,程序崩溃。如果 try 中没有异常,except 块不执行,finally 块照常执行,程序正常往下走。

逻辑:try有异常并被except成功捕获 → 异常不再抛出 → 执行 except 块 → 执行 finally 块 → finally 之后的代码继续执行 → 程序不崩溃

逻辑:try有异常且没有被except成功捕获 → except 块不执行 → finally 照样执行 → 异常继续抛出 → finally 之后的代码不执行 → 程序崩溃

逻辑:try没有异常 → except 块不执行 → finally 照常执行 → 程序不崩溃

try-except代码示例

python 复制代码
try:
    result = 10/0     #抛出异常
    print('返回结果1')  #try块中代码,一旦某一行抛出异常,该行之后的代码都不会执行
except Exception as e:   #成功捕获了异常
    print(f"错误信息: {e}")  #处理了异常
print('返回结果2')   #执行,因为try里面的异常被 except 捕获,不会继续抛出;即使 except 里是 pass(不处理),except 块之后代码也会继续执行

输出结果:
错误信息: division by zero
返回结果2

try-finally代码示例

python 复制代码
try:
    result = 10/0  #抛出异常
    print('返回结果1')  #try块中代码,一旦某一行抛出异常,该行之后的代码都不会执行
finally:
    print("计算完成")  #无论try 中的代码是否发生异常,finally块中的代码都会执行
print('返回结果2')  #不会执行,finally 执行完之后,try里面的异常会继续抛出去。

输出结果:
计算完成
Traceback (most recent call last):
  File "C:\Users\Users1\PythonProject1\Test.py", line 2, in <module>
    result = 10/0  #抛出异常
             ~~^~
ZeroDivisionError: division by zero
相关推荐
paopaokaka_luck1 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
信誓旦旦的程序猿1 小时前
【Python量化实战宝典 #22】涨跌停、连板情绪手册:情绪指标构建(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
AI你一生一世1 小时前
当推理遇上晶圆级引擎:拆解 GPT-5.6 Sol 超快推理背后的系统权衡
系统优化·1024程序员节·大模型推理·晶圆级引擎·延迟与吞吐·内存带宽·gpt-5.6 sol
gCode Teacher 格码致知1 小时前
Pandas教学-21:subplots的使用
python·pandas·1024程序员节
device_Any1 小时前
容量评估:峰值、均值,还有被漏掉的余量
1024程序员节
码士集团小青2 小时前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
一级新生2 小时前
提示词工程:跟 AI 打交道的手艺
人工智能·大模型·dify·1024程序员节·提示词工程
无所谓จุ๊บ2 小时前
02_折扣机制与选型建议
1024程序员节
程序猿乐锅2 小时前
Python 面向对象案例:学生成绩管理系统
1024程序员节