You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数中try和except的作用、用法及报错问题咨询

Python函数中try/except的正确用法与语法要点

基础用法示例

在函数中使用try/except的核心是把可能触发异常的代码放在try块里,用except块捕获并处理特定异常。比如处理除法的函数:

def divide(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print("错误:除数不能为0")
        return None
    except TypeError:
        print("错误:输入必须是数字类型")
        return None
    # 无异常时执行的代码可以放在else里
    else:
        print(f"计算结果:{result}")
        return result
    # 无论是否异常都会执行的清理逻辑
    finally:
        print("除法运算执行完毕")

# 测试调用
divide(10, 2)
divide(10, 0)
divide(10, "a")

语法上的关键变化与注意事项

在函数内使用try/except不会改变函数的基本语法结构,但要注意这些细节:

  • 缩进要求:try、except、else、finally块内的代码必须严格缩进,这是Python语法的强制要求,缩进错误会直接触发语法报错。
  • 异常捕获范围:可以在一个except块里捕获多个异常(用元组包裹),比如except (ZeroDivisionError, TypeError):,但要避免直接捕获通用的Exception(除非你明确知道要处理所有异常),否则会隐藏未知错误。
  • 函数执行流:如果try块内的代码触发了被捕获的异常,程序会跳转到对应的except块执行,不会继续执行try块内后续的代码;如果异常未被捕获,会向上传递到函数的调用处,导致程序终止(除非调用处也有try/except)。
  • finally的特殊性:finally块内的代码无论是否发生异常都会执行,哪怕try或except块里有return语句,它也会在函数返回前执行完毕。

常见错误排查(你之前遇到的问题大概率是这些)

  1. 缺少冒号:except语句末尾必须加冒号,比如下面的写法会报错:
# 错误写法
def func():
    try:
        print(1/0)
    except ZeroDivisionError  # 这里少了冒号
        print("错误")

修正:在except ZeroDivisionError后加上:。

  1. 缩进错误:except块内的代码没有正确缩进,比如:
# 错误写法
def func():
    try:
        print(1/0)
    except ZeroDivisionError:
    print("错误")  # 没有缩进,不属于except块

修正:把print("错误")缩进4个空格(或符合你代码的缩进规则)。

  1. 无对应except/finally块:try块后面必须跟至少一个except或finally块,否则语法报错:
# 错误写法
def func():
    try:
        print(1/0)
    # 没有except或finally,直接结束

修正:添加至少一个except或finally块。

  1. 异常捕获顺序错误:如果先捕获通用异常,再捕获具体异常,具体异常永远不会被触发:
# 错误写法
def func():
    try:
        print(1/0)
    except Exception:
        print("通用错误")
    except ZeroDivisionError:
        print("除以0错误")  # 永远不会执行

修正:把具体异常放在前面,通用异常放在后面。

内容的提问来源于stack exchange,提问作者Sushil Kumar Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:55:36