Python干货!异常处理和报错:assert特殊炫技处理

【python】assert的用法,详细解释,包含代码 assert是一个简单、有效的调试工具,用于验证程序中的条件,帮助捕获代码中的错误。它可以帮助开发者在程序运行时进行检查,确保数据或假设符合预期,从而避免潜在的逻辑错误或异常。 阅读详情

程序员每天遇到bug就像喝水吃饭一样平常,关键在于怎么高效而不失优雅的面对这些bug!

常见的异常BUG

  • AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
  • IOError 输入/输出异常;基本上是无法打开文件
  • ImportError 无法引入模块或包;基本上是路径问题或名称错误
  • IndentationError 语法错误(的子类) ;代码没有正确对齐
  • IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  • KeyError 试图访问字典里不存在的键
  • NameError 尝试访问一个没有申明的变量
  • SyntaxError Python代码非法,代码不能编译
  • TypeError 传入对象类型与要求的不符合
  • UnboundLocalError 试图访问一个还未被设置的局部变量
  • ValueError 传入一个调用者不期望的值,即使值的类型是正确的

为了提高程序运行的稳健性,几乎所有语言都提供了 try……except……用法,他们能够确保程序能够跳过异常代码片段继续执行下去。

try:
<语句>        #运行别的代码
except <异常类型>:
<语句>        #如果在try部份引发了'name'异常
except <异常类型> as <数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

所以,你还在只使用 try……except 吗?

主动触发报错和异常是程序员大佬的装X护体方法之一!

本文主要介绍 Python 中的两个异常相关的关键字:assert 和 raise,

前者用于断言发现潜在异常,后者用于触发报错,实际上二者功能有很大相近之处。

assert:断言

assert 一般用于函数和类的内部,在执行具体逻辑前首先对输入参数和程序执行状态进行一定的检查和预判,仅当执行状态满足时才继续执行后续的逻辑,否则断言条件不满足,引发后续的提示。在表达式条件为 false 的时候触发异常。

assert 关键字基本用法为:

assert "条件判断", "条件不满足时输出的提示信息"

语法格式如下:

assert expression

等价于:

if not expression:
    raise AssertionError

assert True # 条件为 true 正常执行
assert False # 条件为 false 触发异

例如,设计一个两数相除的函数,那么应当在执行相除前检查:

  • 两个输入参数是否为数值型
  • 除数是否不为0

这一条件判断可用assert完成,并在条件不满足时优雅的提示报错:

def div(x, y):
     assert isinstance(x, (float, int)) and isinstance(y, (float, int)), \
                 "param `x` and `y` expected to be 'int' or 'float' type"
     assert y != 0, "param `y` should not to be exactly `0`"
     return x/y
 
 div(1, "2")
 ---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-206-579e0bede4d8> in <module>
----> 1 div(1, "2")
<ipython-input-205-258ec937e818> in div(x, y)
      1 def div(x, y):
      2     assert isinstance(x, (float, int)) and isinstance(y, (float, int)), \
----> 3                 "param `x` and `y` expected to be 'int' or 'float' type"
      4     assert y != 0, "param `y` should not to be exactly `0`"
      5     return x/y
AssertionError: param `x` and `y` expected to be 'int' or 'float' type
(由于输入参数y是字符串类型,断言失败,引发断言错误)

由于输入参数y是字符串类型,断言失败,引发断言错误

assert 的最大意义:及时发现程序中未按预期状态执行的错误。

这在多人协作 coding 过程中,比 except 更能提供丰富的报错信息。

raise:触发异常

raise关键字基本语法为:

raise 异常类名称(描述信息)

例如,仍以实现上述 div 函数功能为例,以 raise 关键字执行同样的断言功能,则可如下实现:

def div(x, y):
    if not isinstance(x, (float, int)) or not isinstance(y, (float, int)):
        raise TypeError("param `x` and `y` expected to be 'int' or 'float' type")
    if y == 0:
        raise ZeroDivisionError("param `y` should not to be exactly `0`")
    return x/y

div(1, 0)
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-213-4267cdef819f> in <module>
----> 1 div(1, 0)
<ipython-input-212-dce337c4d91a> in div(x, y)
      3         raise TypeError("param `x` and `y` expected to be 'int' or 'float' type")
      4     if y == 0:
----> 5         raise ZeroDivisionError("param `y` should not to be exactly `0`")
      6     return x/y

ZeroDivisionError: param `y` should not to be exactly `0`
(由于除数为0,raise关键字触发异常)

raise 关键字与 assert 是有相通之处的。但raise 则只用于手动触发异常,某种程度上,raise 的灵活性要比 assert 低,且一般触发的是 Python 内置异常类型。

当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。

raise <instance> 
raise <class>

raise IndexError                #Class(instance created)
raise IndexError()          #Instance(created in statement)12

一起学习python吧!

 

为ta-lib-python构建pytest单元测试:金融量化开发的测试堡垒 在Python量化开发与数据分析领域,单元测试是保障代码质量与计算准确性的基石。其核心原理在于通过自动化测试用例,验证函数在预设输入下的输出是否符合预期,从而及早发现逻辑错误与边界问题。对于金融数据处理,尤其是技术指标计算,单元测试的技术价值尤为突出,它能有效防止因数据预处理不当、指标计算偏差导致的策略信号失真,避免实盘交易中的潜在风险。在应用场景上,单元测试广泛应用于量化策略回测、金融数据分析工具开发以及算法交易系统等对计算精度要求极高的领域。本文聚焦于为ta-lib-python技术分析库构建基于pyt 阅读详情

相关推荐

.NET低代码平台组件质量提升:7个实践实现92.6%测试覆盖率

在软件开发中,单元测试是验证代码逻辑正确性的基础手段,通过模拟输入和断言输出来确保每个独立单元的行为符合预期。其核心原理在于隔离被测代码的依赖,使用Mock或Stub技术模拟外部服务,从而在快速反馈的循环中捕获缺陷。对于企业级应用,尤其是低代码平台,高质量测试的价值尤为突出,它能有效防止底层组件的微小缺陷通过平台的可视化配置被大规模复制,形成“放大器”效应。通过依赖注入、接口隔离等可测试架构设计,结合xUnit的参数化测试和Playwright端到端测试,可以系统化地覆盖组件的各种配置组合和用户交互场景。本

weixin_33859231的博客 374

Python断言(assert)

默认的,__debug__是常量,包括None、False、True这些常量不能重新赋值(即使作为属性名赋值给它们,也会引发),因此可以将它们视为“True”常量。print('debug模式')关于-O,在命令行的环境下,使用时,将会删除(可以理解为忽略)assert语句和任何基于__debug__值的代码。详见PEP 488。关于-OO,在命令行的环境下,使用时,将会丢弃文档字符串。详见PEP 488。def foo():passhelp(foo)上述代码,使用会返回foo函数的文档信息。

2万+

Appium混合应用测试终极指南:从原理到实战,攻克WebView与原生交互难题

移动应用自动化测试是保障软件质量的关键环节,其核心在于模拟用户操作,验证应用功能。在技术原理上,Appium作为主流的开源框架,通过WebDriver协议桥接不同平台,实现对原生应用的自动化控制。然而,当应用采用混合架构,即同时包含原生组件和WebView(用于加载H5页面)时,测试复杂性陡增。其技术价值在于能够统一管理跨技术栈的测试流程,提升测试覆盖率与效率。典型的应用场景包括电商App的商品详情页、金融App的H5业务流程以及企业应用的内嵌表单。本文聚焦于Appium混合应用测试中的核心挑战——上下文(

weixin_30838873的博客 332

Python中的assert用法

Python中的assert用法 本文转载自Python中不尽如人意的断言Assertion,如有侵权,立马删除! 使用assert断言是学习Python一个非常好的习惯,Python assert 断言 语句格式及用法很简单;在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行时崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助;本文主要是将assert断言的基...

qq_42269354的博客 2万+

测试用例设计实战:从八大要素到自动化与AI提效

测试用例是软件质量保障的核心工具,其本质是通过结构化方法验证系统行为是否符合预期。从原理上讲,它基于等价类划分、边界值分析等黑盒测试技术,结合场景法、状态迁移等流程建模手段,系统性地覆盖功能路径与异常情况。在技术价值层面,精心设计的用例不仅能高效发现缺陷,更是自动化测试脚本的基础框架和团队知识沉淀的载体。尤其在敏捷开发和DevOps实践中,用例的可维护性、可自动化性直接影响测试效率与反馈速度。当前,随着AI技术在测试领域的应用,如基于需求文档的用例草稿生成、智能测试数据构造等,测试工程师可以借助“编写测试用

weixin_30642869的博客 482

【Python】断言(assert)的用法,你真的懂吗?

【Python】断言(assert)的用法前言简介用法总结与注意事项 前言 看代码时知道是什么,但写代码时不建议经常使用,一直见,一直不明白,今天来解密。 简介 assertion(断言)在软件开发中是一种常用的调试方式,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告并且退出。 一般来说,assertion用于保证程序最基本、关键的正确性。asse

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 2万+

python assert用法

http://blog.sina.com.cn/s/blog_76e94d210100vz37.html http://www.cnblogs.com/cedrelaliu/p/5948567.html http://www.cnblogs.com/liuchunxiao83/p/5298016.html 1、assert语句用来声明某个条件是真的。 2、如果你

xiaminli的博客 2万+

使用python实现随机正态分布数据,并导出到表格(超详细)

最近需要大量的正态分布的数据,为了方便,使用python实现随机正态分布,画出理想正态分布图和实际的矩形分布,并导出到表格里面。以上就是今天要讲的内容,本文仅仅简单介绍了使用python随机生成正态分布的数据,画图,并导出。正态分布是机器学习中很常见的一种需求,往往需要大量的数据进行测试,此时,本文的方法就可以大大减少因数据而花费的时间啦!如有问题,欢迎评论区留言啊!

m0_53533553的博客 1万+

Python脚本运行全解析:从基础执行到生产部署的工程化实践

在Python开发中,运行.py文件是基础操作,但背后涉及解释器环境、模块搜索路径和依赖管理等核心原理。理解Python解释器的多重身份(如系统Python与虚拟环境Python的区别)以及sys.path的初始化机制,是确保代码可复现和跨平台兼容的技术基础。这些原理支撑了现代Python项目的工程化价值,使得从简单的命令行脚本到复杂的生产级应用都能稳定运行。在实际应用场景中,开发者需要掌握直接运行与模块运行(python script.py vs python -m module)的本质区别,并善用虚拟环

weixin_30420305的博客 386

Windows11安装Ubuntu 20.04.3 LTS双系统(详细过程)

一、基础环境 听说BIOS模式的传统MBR模式和新式UEFI模式,会对安装双系统产生影响。Windows11应该都是UEFI吧,可以按win+r输入msinfo32回车确认查看BIOS模式,我的电脑是UEFI+双硬盘 Ubuntu安装准备 1、 官网下载Ubuntu 20.04.3 LTS镜像iso文件:https://ubuntu.com/download/desktop 2、 下载官网推荐的U盘启动制作工具rufus: https://rufus.ie/ 3、制作启动u盘 插入U盘, 运行 rufu

学习随笔 9万+

javaFx + SpringBoot 启动时报错:No auto configuration classes found in META-INF/spring.factories 解决方法

javaFx+SpringBoot+(de.roskenet:springboot-javafx-support:2.1.6)开发。 直接在idea中运行正常,但打包成jar,之后使用java -jar xxx.jar启动报错,发现日志中有: java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. 以及 at de.felixroske.jfxsuppo

long117long的专栏 4613

Appium自动化测试:移动端Deep Link与URL Scheme跳转验证实战

在移动应用开发中,深度链接(Deep Link)与统一资源定位符方案(URL Scheme)是实现跨应用页面跳转与场景无缝衔接的核心技术。其原理是通过注册自定义协议或标准HTTP/HTTPS链接,将用户从外部环境(如浏览器、推送通知)精准引导至应用内指定页面,并携带关键参数。这项技术的价值在于极大提升了用户体验与业务转化效率,是连接营销活动、社交分享与应用内功能的关键桥梁。在电商、社交、内容资讯等应用场景中,确保跳转的准确性与可靠性至关重要。本文聚焦于使用Appium这一主流开源移动端自动化测试框架,系统讲

weixin_34082854的博客 897

ClearML中文文档实战:从安装到第一个实验的保姆级教程

本文提供ClearML从零开始的实战指南,涵盖核心组件理解、Python SDK安装、服务器配置及首个自动化实验的完整流程。通过改造PyTorch训练脚本的实例,详细演示了如何利用ClearML自动记录实验参数、指标与模型,实现机器学习实验的可复现性与高效管理,并简要介绍了进阶的自动化工作流。

weixin_29216049的博客 398

蘑菇街测试笔试题深度解析:测试思维与自动化实战指南

软件测试是保障产品质量的关键环节,其核心在于通过系统化的用例设计和分层策略,尽早发现缺陷以降低修复成本。随着自动化测试技术(如pytest、Appium)的普及,企业越来越看重测试人员的工程实践能力,接口测试、移动端专项测试等也逐渐成为岗位必备技能。在电商业务中,链路长、并发高、规则复杂的特点,使得测试思维和全链路排查能力尤为重要。本文基于蘑菇街2019年测试笔试真题,从测试金字塔、黑盒用例设计、冒烟与回归测试等基础考点出发,结合自动化框架选型、接口测试实战、App专项测试等热门方向,深度解析每道题背后的面

weixin_34344403的博客 385

USB HID虚拟电池:Windows零驱动电源状态模拟方案

虚拟电池是一种在硬件测试与功耗分析中替代真实电池、实现可控电源状态注入的关键技术。其核心原理是通过标准USB HID协议(特别是UPS设备类)向操作系统上报可编程的AC/DC状态、剩余电量、容量参数等,绕过内核驱动限制,达成毫秒级响应与跨Windows版本兼容。该技术显著提升SoC能效验证、电池健康度校准及低电量行为触发等场景的可重复性与精度。本文基于CH554微控制器实现符合HID UPS规范的物理层虚拟电池设备,支持零驱动安装、USB原生识别与实时参数调控,适用于笔记本平台功耗建模、电源管理策略验证及自

weixin_35755188的博客 355

prplOS amx-fxgi调试-订阅subscribe

本文分析了prplOS中amx-fxgi订阅功能(subscribe)的实现与调试过程。通过梳理订阅流程发现,默认订阅失败主要由于acl规则限制导致。文章详细介绍了订阅的两个关键步骤:建立GET长连接和POST设置订阅路径,并通过修改代码绕过acl验证成功实现订阅功能。最终验证了在同一连接下订阅多个路径及实时接收状态更新的可行性,有效降低了设备查询负载。该方案为prplOS的实时数据监控提供了优化思路。

四儿家的小祖宗的博客 332

【python实操】python小程序之参数化以及Assert(断言)

python小程序之参数化以及Assert(断言)

ya的博客 3280

【MATLAB-app】系列教程(含视频)第4、5、6课:实战_制作简单的图像处理软件

写作时间: 2020-12-27 我的教程目录 第1课:初步了解appdesigner 第2课:学会制作一个计算器 第3课:学习更多的控件(重点!) 第4课:实例1:制作一个图像处理软件 第5课:学习APPdesigner的设计精髓,框架 第6课:结合使用多种控件,函数等,丰富我们的实例1 第7课:app设计打包,完成工程应用导出 标题: 第4课:我的实例_学会制作一个图像处理软件 本文目录: 1.先看看我之前的一个工程 2.常用的基本组件控件 3.最常用且实用的控件的用法 -3.1 editfilel

wind 4055

【Python进阶】assert 使用 | assert触发条件,使用实践示例

assert是 Python 中的一个关键字,用于在代码中进行断言检查。它的作用是在条件为False的情况下触发异常,用于帮助开发者在程序中捕获和处理错误。assert其中expression是要进行断言检查的条件,message是可选的错误消息,当断言失败时会显示该消息。如果expression的结果为False,则会引发异常。x = 10在这个例子中,由于x的值不等于5,所以断言会失败,触发异常,并显示消息。在开发过程中,assert可以帮助开发者快速发现程序中的问题,并进行调试和修复。

专注于人工智能的算法与应用 3073

泛微OA集成阿里云短信(E9保姆教程)

泛微OA集成阿里云短信(E9保姆教程)

技术分享 517

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

python assert详解

assert 是一个有用的调试工具,帮助开发者在开发阶段捕捉潜在的逻辑错误和不一致性。对于关键的输入验证,应使用异常处理机制,以确保程序在任何环境下都能正常运行。assert 是 Python 中用于调试和验证程序中条件的一个重要语句。它可以在程序中某些关键点检查条件是否为真,如果条件为假,则抛出 AssertionError 异常并终止程序执行。message:(可选)在抛出 AssertionError 时输出的错误信息,用于描述断言失败的原因。在这种模式下,所有的断言都将被跳过,不会进行条件检查。

m0_49133355的博客 2270

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python assert

python中的assert命令通常在代码调试中会被使用,它用来判断紧跟着的代码的正确性,如果满足条件(正确),万事大吉,程序自动向后执行,如果不满足条件(错误),会中断当前程序并产生一个AssertionError错误。 它近似等同于如下代码: if __debug__: if not expression: raise AssertionError 比如我们计算一个实际问题,我们经历了一系列的计算后得到了一个时间t值,这时我们就可以在代码中使用assert t >= 0来对我们获取到的时间

u011699626的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python-assert(断言)的用法

Python-assert(断言)的用法

aaaccc444的博客 7204

Python 进阶语法:断言

断言,简而言之,就是检查代码中的某个条件是否为真。如果条件为真,程序继续执行;如果条件为假,程序会引发一个。

moment159的博客 4930

assert:python断言报错语句

assert用于判断一个表达式,在表达式结果为 False 的时候触发异常。若表达式结果为True,则不做任何反应。 代码示例1: In[1]中 assert 2>1 判断为True,所以可以继续执行下面的程序。 In[2]中 assert 1>2 判断为False,所以报错AssertionError,程序中断。 python也支持自己设置AssertionError的提示语句。格式为: assert + 空格 + 要判断语句,“报错语句” 代码示例2: 设置AssertionEr

qq_43799400的博客 5116

【Python】断言(assert)

Python 的断言(assert)是一种调试工具,用于验证程序中的某个条件是否为True。如果条件为False,程序会抛出一个异常并终止执行。断言通常用于开发阶段,帮助开发者快速发现和定位错误。

Herbert 771
上一篇: 秃头福音!医疗联手AI,大势所趋,破解秃头难题
下一篇: Python干货宝典!玩转内置模块:日历模块
土豆编程
博客等级 码龄6年 105粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值