当前位置: 首页 > news >正文

【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 用于资源清理:如关闭文件、数据库连接等。



http://www.jsqmd.com/news/193740/

相关文章:

  • 品牌营销策划哪家强?新口碑测评精选品牌营销推广策划公司推荐 - 工业设备
  • 深度测评10个AI论文工具,助本科生轻松搞定论文写作
  • 语音AI创业新风口:基于GLM-TTS提供定制化配音SaaS服务
  • GLM-TTS支持哪些音频格式输入?MP3/WAV/FLAC兼容性实测
  • mathtype addins插件开发实现一键发送公式至TTS
  • 运维转行网络安全实情:能切入哪些岗位?别以为要重学编程,你本就有 70% 基础!
  • 弹簧触指生产商哪家好、生产厂性价比排名及加工厂优势对比全解析 - 工业品牌热点
  • 为什么你的分库分表撑不住流量洪峰?扩容设计的5大致命缺陷
  • 【PHP安全加固秘籍】:3步构建坚不可摧的跨域访问控制体系
  • GLM-TTS能否用于无障碍阅读?视障人士辅助工具开发设想
  • huggingface accelerate库优化GLM-TTS多GPU推理
  • 网安零基础半年入行保姆级冲刺计划:含全套学习路线与阶段安排
  • 【紧急排查必备】:当生产环境日志无法定位问题时,你的输出格式可能错了
  • 2026山西靠谱原木家具供应商排行榜,新测评精选原木家具个性化定制公司推荐 - myqiye
  • 【PHP智能家居场景模式实战指南】:掌握5大核心场景设计技巧
  • 2025年畅益家座椅电梯工厂直销公司推荐,专业厂家直售实力全解析 - 工业推荐榜
  • Web 安全零基础入门:从 OWASP Top 10 到常见漏洞,这一篇收藏好就够了!
  • html5 file reader预览参考音频再上传至GLM-TTS
  • PHP CORS配置十大误区(第7个几乎人人都中招)
  • github template repository快速创建GLM-TTS项目副本
  • web接入科大讯飞实时语音转写模块
  • GLM-TTS webUI二次开发指南:科哥版界面功能扩展思路
  • 腾讯企业邮箱收费标准2026最新版:按用户数阶梯定价详解 - 品牌2026
  • huggingface auto tokenizer自动匹配GLM-TTS分词器
  • 更改freeBasic编写dll中函数名被大写和尾部带的@数字
  • Product Hunt 每日热榜 | 2025-12-28
  • 2026年1月福建蜗牛酶公司推荐榜:蜗牛酶品牌/蜗牛酶销售公司/蜗牛酶研发公司,匠心深耕赋能多元应用,漳州叶氏引领行业发展 - 海棠依旧大
  • 摄像头如何“看得准”也“抓得稳”?2026年柔性夹爪选型解析 - 品牌2025
  • 2026年比较好的一次性喉镜片,便携式电子鼻咽喉镜,电子鼻咽镜厂家选购参考汇总 - 品牌鉴赏师
  • 零续航焦虑!Sub-GHz射频芯片如何让无线控制摆脱电池束缚?