Python核心技术与实战
景霄
Facebook资深工程师
立即订阅
12643 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 从工程的角度深入理解Python
免费
基础篇 (14讲)
01 | 如何逐步突破,成为Python高手?
02 | Jupyter Notebook为什么是现代Python的必学技术?
03 | 列表和元组,到底用哪一个?
04 | 字典、集合,你真的了解吗?
05 | 深入浅出字符串
06 | Python “黑箱”:输入与输出
07 | 修炼基本功:条件与循环
08 | 异常处理:如何提高程序的稳定性?
09 | 不可或缺的自定义函数
10 | 简约不简单的匿名函数
11 | 面向对象(上):从生活中的类比说起
12 | 面向对象(下):如何实现一个搜索引擎?
13 | 搭建积木:Python 模块化
14 | 答疑(一):列表和元组的内部实现是怎样的?
进阶篇 (11讲)
15 | Python对象的比较、拷贝
16 | 值传递,引用传递or其他,Python里参数是如何传递的?
17 | 强大的装饰器
18 | metaclass,是潘多拉魔盒还是阿拉丁神灯?
19 | 深入理解迭代器和生成器
20 | 揭秘 Python 协程
21 | Python并发编程之Futures
22 | 并发编程之Asyncio
23 | 你真的懂Python GIL(全局解释器锁)吗?
24 | 带你解析 Python 垃圾回收机制
25 | 答疑(二):GIL与多线程是什么关系呢?
规范篇 (7讲)
26 | 活都来不及干了,还有空注意代码风格?!
27 | 学会合理分解代码,提高代码可读性
28 | 如何合理利用assert?
29 | 巧用上下文管理器和With语句精简代码
30 | 真的有必要写单元测试吗?
31 | pdb & cProfile:调试和性能分析的法宝
32 | 答疑(三):如何选择合适的异常处理方式?
量化交易实战篇 (8讲)
33 | 带你初探量化世界
免费
34 | RESTful & Socket: 搭建交易执行层核心
35 | RESTful & Socket: 行情数据对接和抓取
36 | Pandas & Numpy: 策略与回测系统
免费
37 | Kafka & ZMQ:自动化交易流水线
38 | MySQL:日志和数据存储系统
39 | Django:搭建监控平台
40 | 总结:Python中的数据结构与算法全景
技术见闻与分享 (4讲)
41 | 硅谷一线互联网公司的工作体验
42 | 细数技术研发的注意事项
加餐 | 带你上手SWIG:一份清晰好用的SWIG编程实践指南
43 | Q&A:聊一聊职业发展和选择
结束语 (1讲)
结束语 | 技术之外的几点成长建议
Python核心技术与实战
登录|注册

28 | 如何合理利用assert?

景霄 2019-07-12

你好,我是景霄。

相信你平时在写代码时,肯定或多或少看到过 assert 的存在。我也曾在日常的 code review 中,被一些同事要求增加 assert 语句,让代码更加健壮。

不过,尽管如此,我发现在很多情况下,assert 还是很容易被忽略,人们似乎对这么一个“不起眼”的东西并不关心。但事实上,这个看似“不起眼”的东西,如果能用好,对我们的程序大有裨益。

说了这么多,那么究竟什么是 assert,我们又该如何合理地使用 assert 呢?今天这节课,我就带你一起来学习它的用法。

什么是 assert?

Python 的 assert 语句,可以说是一个 debug 的好工具,主要用于测试一个条件是否满足。如果测试的条件满足,则什么也不做,相当于执行了 pass 语句;如果测试条件不满足,便会抛出异常 AssertionError,并返回具体的错误信息(optional)。

它的具体语法是下面这样的:

assert_stmt ::= "assert" expression ["," expression]
复制代码

我们先来看一个简单形式的assert expression,比如下面这个例子:

assert 1 == 2
复制代码

它就相当于下面这两行代码:

if __debug__:
if not expression: raise AssertionError
复制代码

再来看assert expression1, expression2的形式,比如下面这个例子:

© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Python核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(20)

  • 图·美克尔
    写测试代码时用
    2019-07-15
    2
  • Eski
    经常在 try except 当中用 assert,比较方便在一些不需要程序继续执行下去的地方跳出来,比if else好用
    2019-07-16
    1
  • 小侠龙旋风
    印象中好像就这个用法比较常用一点:
    assert isinstance(input, list), 'input must be type of list'

    作者回复: 这个是一个常用的例子,但是文中所讲的其实都挺常用的

    2019-07-12
    1
  • 阿西吧
    正式上线时也建议用assert??

    作者回复: 线上代码里也有assert的

    2019-07-12
    1
  • 我记得以前看过assert会严重影响运行性能,所以一直不在代码里用。工作中,主要是单元测试用,想跟老师了解fb的规定

    作者回复: 没有这个说法

    2019-07-12
    1
  • 丁丁历险记
    个人理解,assert 主要是做健壮性处理。
    2019-10-07
  • Geek_54edc1
    一般来说,测试代码最后一步都是assert
    2019-09-30
  • 梁大瓜
    我记得最早写机器学习代码的时候,assert用来检查输入。
    2019-08-07
  • Fergus
    assert 测试一个条件是否满足

    检查值在某一确定的范围:
    assert a>0, “a must > 0”

    检查值的数据类型:
    assert isinstance(a, list), “a should be list”

    注:
    1. assert 是可以使用-O关闭的;
    2. run-time error需要使用try-except异常处理;
    2019-07-17
  • Ben
    python -V: Python 3.7.0
    Python test.py -O时__debug__仍为True, Python -O test.py时为False
    2019-07-17
  • Hector
    项目中封装自己公司封装定义的expection,接口给出展示不同错误不会混用
    2019-07-16
  • 一般不怎么用,全部使用异常处理的。
    2019-07-15
  • 更好的做自己
    个人认为assert的使用应该是,有没有assert程序都能够正常运行,但有了assert可以使我们的代码后期维护更加方便

    作者回复: 说的很好

    2019-07-12
  • 程序员人生
    老师,没有用过assert唉。看你介绍,好像用来调试程序用
    2019-07-12
  • carpe_diem
    assert主要用于开发和测试阶段,使用assert时,应该是思考一下,当去掉assert语句之后,代码逻辑是否仍然正确。
    2019-07-12
  • 天凉好个秋
    感觉只要可以disable,那还是需要对相同问题加入if判断啊。是否是像其他同学说的自测阶段才能用assert呢?并且对于可能出现的相同问题需要用assert写一遍,再用if写一遍?
    2019-07-12
  • enjoylearning
    assert想用但不确信什么情况下用,一直以为python没法做debug判断,原来也有个类似,我们线上经常出现一些诡异的bug,不知道可不可以开启这个
    2019-07-12
    2
  • 安排
    自测阶段才能用assert吧?上线长时间运行的程序都会disable掉assert吧?
    2019-07-12
  • AllenGFLiu
    以前看其他课程,倒是都没讲过 assert这一点,看下来觉得assert还是大有用武之地的,一定找机会用一下。
    2019-07-12
  • Hurt
    可以这么理解吗 只是用来作为自我检查 而不是用来做你代码的判断条件的
    2019-07-12
收起评论
20
返回
顶部