python try except 语法


python try except 语法

try: ... except: ... 是 Python 里错误处理(异常处理)的核心语法之一, 可以让程序在遇到错误时不中断运行,而是优雅地处理问题

我们来系统讲清楚它👇


🧩 一、基本语法结构

try:
    # 可能出错的代码
except:
    # 出错时执行的代码

示例:

try:
    x = 1 / 0
except:
    print("发生错误!")

输出:

发生错误!

没有 try 的话,1/0 会直接让程序崩溃报错。 有了 try-except,程序继续运行。


🧠 二、异常类型(推荐写法)

最好不要直接写裸的 except:,而是指定异常类型

try:
    x = 1 / 0
except ZeroDivisionError:
    print("不能除以 0!")

更精确地控制要捕获哪种错误,避免掩盖别的 bug。


常见异常类型:

异常类型含义
ZeroDivisionError除以 0
ValueError值错误(类型对,但值非法)
TypeError类型错误
FileNotFoundError文件不存在
KeyError字典中找不到 key
IndexError列表索引越界
OSError操作系统相关错误(文件路径、权限等)

🧱 三、多个 except 块

可以写多个 except 分开处理:

try:
    num = int(input("请输入一个数字: "))
    print(10 / num)
except ValueError:
    print("输入的不是数字!")
except ZeroDivisionError:
    print("不能除以0!")

🎯 四、else 和 finally

1️⃣ else:当 try 里没出错 才执行

try:
    print("执行成功")
except:
    print("出错了")
else:
    print("没有出错,所以执行 else")

2️⃣ finally无论是否出错都执行

常用于“清理操作”,例如关闭文件或断开数据库连接:

try:
    f = open("data.txt")
    # 处理文件
except FileNotFoundError:
    print("文件没找到")
finally:
    f.close()  # ✅ 不管成功或失败,都会执行

🧩 五、捕获错误对象(查看错误信息)

try:
    1 / 0
except Exception as e:
    print("出错类型:", type(e).__name__)
    print("错误详情:", e)

输出:

出错类型: ZeroDivisionError
错误详情: division by zero

🧩 六、综合示例(Flask 上传场景)

from werkzeug.utils import secure_filename
import os

try:
    filename = secure_filename(upload.filename)
    upload.save(os.path.join("./uploads", filename))
except FileNotFoundError:
    print("❌ 上传目录不存在")
except OSError as e:
    print(f"❌ 文件系统错误: {e}")
except Exception as e:
    print(f"未知错误: {e}")
else:
    print("✅ 上传成功")
finally:
    print("上传任务结束")

✅ 小结表格

关键字作用
try包裹可能出错的代码
except捕获并处理错误
else没有出错时执行
finally无论是否出错都执行(用于清理资源)
as e获取错误对象,打印或记录详情