Python 处理异常

简介: Python 处理异常

除了上述常见的 try - except 结构处理异常外,Python 还有一些相关要点:

异常的传递

当函数中发生异常但未在该函数内处理时,异常会向上传递到调用该函数的地方。如果一直没有被处理,最终会导致程序崩溃并显示异常信息。

def divide(a, b):
    return a / b

def main():
    try:
        divide(10, 0)
    except ZeroDivisionError:
        print("在main函数中捕获到除零异常")

main()

divide 函数中,10 / 0 会引发 ZeroDivisionError,由于该函数没有处理此异常,异常传递到 main 函数,main 函数捕获并处理了它。

捕获所有异常

虽然不推荐在大多数情况下使用,但可以使用一个 except 不指定异常类型来捕获所有异常。

try:
    num = int('abc')
    result = 10 / num
except:
    print("发生了异常")

不过这种方式无法区分不同类型的异常,不利于调试和处理特定的错误情况,在实际应用中应尽量避免。

重新引发异常

except 块中可以捕获异常并在某些情况下重新引发它,可能是为了进行额外的处理或让更上层的调用者处理。

def process_number():
    try:
        num = int('abc')
    except ValueError as ve:
        print("捕获到值错误,重新引发...")
        raise ve

try:
    process_number()
except ValueError:
    print("在外部捕获到重新引发的值错误")

process_number 函数中,捕获 ValueError 后打印一些信息,然后使用 raise ve 重新引发相同的异常,外部的 try - except 块再次捕获并处理该异常。

使用 assert 语句进行简单异常处理

assert 语句用于调试,它会测试一个条件,如果条件为假,会引发 AssertionError 异常。

def divide(a, b):
    assert b != 0, "除数不能为零"
    return a / b

try:
    result = divide(10, 0)
except AssertionError as ae:
    print(f"断言错误: {ae}")

这里使用 assert 确保除数不为零,如果违反该条件,AssertionError 异常会被引发,外部的 try - except 块捕获并处理。

相关文章
|
2月前
|
小程序 关系型数据库 MySQL
基于Android的智慧旅游系统的设计与实现
本文探讨智慧旅游平台微信小程序的开发,基于微信小程序、MySQL数据库与uni-app技术,实现信息高效管理与移动端便捷服务,提升旅游信息化水平。
|
2月前
|
存储 Kubernetes Perl
Kubernetes中Pod的常用命令及镜像拉取策略详解
理解Kubernetes中Pod的操作和配置策略,对于保障应用的顺利部署和运行至关重要。通过掌握这些命令和策略,你可以更有效地管理和优化你的Kubernetes集群。
439 17
|
3月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
703 56
|
2月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
2月前
|
人工智能 监控 Java
零代码改造 + 全链路追踪!Spring AI 最新可观测性详细解读
Spring AI Alibaba 通过集成 OpenTelemetry 实现可观测性,支持框架原生和无侵入探针两种方式。原生方案依赖 Micrometer 自动埋点,适用于快速接入;无侵入探针基于 LoongSuite 商业版,无需修改代码即可采集标准 OTLP 数据,解决了原生方案扩展性差、调用链易断链等问题。未来将开源无侵入探针方案,整合至 AgentScope Studio,并进一步增强多 Agent 场景下的观测能力。
1483 32
|
2月前
|
自然语言处理 测试技术 API
通义Qwen3-Max:大就是好
通义千问Qwen3-Max正式发布,参数超1T,训练稳定高效,在代码、推理、多语言等任务中表现卓越。预览版已登顶LMArena榜单前三,支持阿里云百炼API调用与Qwen Chat体验,敬请试用。
1633 32
|
3月前
|
存储 人工智能 运维
AI 网关代理 RAG 检索:Dify 轻松对接外部知识库的新实践
Higress AI 网关通过提供关键桥梁作用,支持 Dify 应用便捷对接业界成熟的 RAG 引擎。通过 AI 网关将 Dify 的高效编排能力与专业 RAG 引擎的检索效能结合,企业可在保留现有 Dify 应用资产的同时,有效规避其内置 RAG 的局限,显著提升知识驱动型 AI 应用的生产环境表现。
1965 91
|
存储 安全 数据安全/隐私保护
Token 是什么?全面解析身份认证中的 Token 机制
本文全面解析Token在身份认证中的核心机制,涵盖JWT、Session Token、OAuth等类型,深入讲解其工作原理、安全性策略、生命周期管理及实际应用场景,助力开发者构建安全高效的现代Web应用认证体系。
1635 3
|
机器学习/深度学习 人工智能 自然语言处理
如何构建企业级数据智能体:Data Agent 开发实践
本篇将介绍DMS的一款数据分析智能体(Data Agent for Analytics )产品的技术思考和实践。Data Agent for Analytics 定位为一款企业级数据分析智能体, 基于Agentic AI 技术,帮助用户查数据、做分析、生成报告、深入洞察。