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