news 2026/7/30 11:09:34

【Python】异常处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Python】异常处理

Python 的异常(Exceptions)是程序运行时发生的错误信号,用于处理程序中的非正常情况。通过异常机制,你可以优雅地捕获和处理错误,避免程序崩溃。


一、常见内置异常类型

表格

异常类型说明示例
SyntaxError语法错误(通常在解析阶段就报错,不属于运行时异常)print("hello"(缺少右括号)
NameError使用未定义的变量print(x)(x 未定义)
TypeError类型不匹配"a" + 1
ValueError值正确但类型不合适int("abc")
IndexError序列索引超出范围[1,2][5]
KeyError字典中找不到指定键d = {}; d['missing']
ZeroDivisionError除零错误1 / 0
FileNotFoundError文件未找到open('not_exist.txt')
AttributeError对象没有该属性"str".append()
ImportError导入模块失败import non_existent_module

所有异常都继承自BaseException,但用户自定义异常通常继承自Exception


二、异常处理:try...except

基本语法:

try: # 可能引发异常的代码 result = 10 / 0 except ZeroDivisionError: # 处理特定异常 print("不能除以零!")

处理多个异常

try: num = int(input("请输入一个数字: ")) result = 100 / num except ValueError: print("请输入有效的数字!") except ZeroDivisionError: print("不能输入零!") except Exception as e: # 处理所有其他异常 print(f"发生了未知错误: {e}")

完整的异常处理结构

def divide_numbers(x, y): try: result = x / y except ZeroDivisionError as e: print(f"除数不能为零: {e}") result = None except TypeError as e: print(f"类型错误: {e}") result = None else: # 只有在没有异常发生时执行 print("计算成功!") finally: # 无论是否发生异常都会执行 print("执行结束") return result # 测试 print(divide_numbers(10, 2)) # 正常 print(divide_numbers(10, 0)) # 除以零 print(divide_numbers(10, "2")) # 类型错误

自定义异常

# 创建自定义异常 class MyCustomError(Exception): """自定义异常类""" def __init__(self, message, error_code): super().__init__(message) self.error_code = error_code def __str__(self): return f"{self.args[0]} (错误代码: {self.error_code})" # 使用自定义异常 def validate_age(age): if age < 0: raise MyCustomError("年龄不能为负数", 1001) elif age > 150: raise MyCustomError("年龄超出合理范围", 1002) return True # 测试自定义异常 try: validate_age(-5) except MyCustomError as e: print(f"自定义错误: {e}, 代码: {e.error_code}")

三、主动抛出异常:raise

def divide(a, b): if b == 0: raise ValueError("除数不能为零!") return a / b # 调用 try: divide(10, 0) except ValueError as e: print(e) # 输出:除数不能为零!

最佳实践

  1. 不要空的 except:python
    # ❌ 不推荐 try: ... except: pass
    这会隐藏所有错误,包括系统退出(如KeyboardInterrupt)。
  2. 捕获具体异常,而不是笼统的Exception(除非必要)。
  3. 记录日志:在 except 块中使用logging模块记录错误信息。
  4. finally 用于资源清理:如关闭文件、数据库连接等。



版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 12:14:10

从入门到精通:PHP实现视频流加密播放的10个关键技术点

第一章&#xff1a;PHP视频流加密播放概述在现代Web应用中&#xff0c;保护数字内容的安全性已成为开发者关注的重点&#xff0c;尤其是涉及视频资源的在线播放场景。PHP作为服务端脚本语言&#xff0c;虽不直接处理音视频解码&#xff0c;但可通过控制视频流的分发与访问权限&…

作者头像 李华
网站建设 2026/7/28 2:47:47

语音合成中的韵律建模:如何让机器读诗更有节奏美感?

语音合成中的韵律建模&#xff1a;如何让机器读诗更有节奏美感&#xff1f; 在数字人声逐渐走进我们日常生活的今天&#xff0c;一个曾经被忽视的问题正变得愈发重要——为什么机器念诗总是“平平无奇”&#xff1f;哪怕字正腔圆&#xff0c;也像在读说明书&#xff0c;毫无韵味…

作者头像 李华
网站建设 2026/7/27 6:01:16

dify函数调用节点执行外部脚本触发GLM-TTS生成

Dify函数调用节点执行外部脚本触发GLM-TTS生成 在智能语音应用日益普及的今天&#xff0c;越来越多的产品开始追求“有温度的声音”——不再是千篇一律的机械朗读&#xff0c;而是带有特定音色、情感甚至方言特色的自然语音。然而&#xff0c;主流云服务提供的TTS接口往往音色固…

作者头像 李华
网站建设 2026/7/29 21:33:31

GLM-TTS webUI二次开发指南:科哥版界面功能扩展思路

GLM-TTS webUI 二次开发深度实践&#xff1a;从功能扩展到工程落地 在当前 AIGC 浪潮推动下&#xff0c;语音合成已不再是实验室里的“黑箱技术”&#xff0c;而是逐渐渗透进内容创作、智能客服、虚拟人交互等实际场景。然而&#xff0c;大多数开源 TTS 模型仍停留在命令行阶段…

作者头像 李华