什么是assert

  assert的语法:

assert_stmt ::=  "assert" expression ["," expression]

  例:

assert 1 == 2,  'assertion is wrong'
Traceback (most recent call last):File "assert.py", line 4, in <module>assert 1 == 2,  'assertion is wrong'
AssertionError: assertion is wrong

  相当于

if __debug__:if not expression1: raise AssertionError(expression2)

assert 在程序中的作用,是对代码做一些 internal 的 self-check。使用 assert,就表示你很确定。这个条件一定会发生或者一定不会发生。
注意:不能在使用assert时加上括号
assert(1 == 2, 'This should fail')
# 输出
<ipython-input-8-2c057bd7fe24>:1: SyntaxWarning: assertion is always true, perhaps remove parentheses?assert(1 == 2, 'This should fail')

assert 的用法

举例几个常用的场景。
1.商品打折。要求输入为原来的价格和折扣,输出是折后的价格   
def apply_discount(price, discount):updated_price = price * (1 - discount)assert 0 <= updated_price <= price, 'price should be greater or equal to 0 and less or equal to original price'return updated_price

  如果assert的条件为False,会raise

apply_discount(100, 0.2)
80.0apply_discount(100, 2)
AssertionError: price should be greater or equal to 0 and less or equal to original price

  2.后台想知道每个商品的平均销售价格,算法是销售总额 / 销售数目:

def calculate_average_price(total_sales, num_sales):assert num_sales > 0, 'number of sales should be greater than 0'return total_sales / num_sales

  加入了 assert 语句,规定销售数目必须大于 0.

  3.检查输入是否list

def func(input):assert isinstance(input, list), 'input must be type of list'# 下面的操作都是基于前提:input 必须是 listif len(input) == 1:...elif len(input) == 2:...else:... 

assert 错误示例

  assert 的检查是可以被关闭的,比如在运行 Python 程序时,加入-O这个选项就会让 assert 失效。因此,一旦 assert 的检查被关闭,user_is_admin() 和 course_exist() 这两个函数便不会被执行。这就会导致严重问题:

def delete_course(user, course_id):assert user_is_admin(user), 'user must be admin'assert course_exist(course_id), 'course id must exist'delete(course_id)

  对于程序中的一些 run-time error,还是得用异常处理

def delete_course(user, course_id):if not user_is_admin(user):raise Exception('user must be admin')if not course_exist(course_id):raise Exception('coursde id must exist')delete(course_id)  

参考

  极客时间《Python核心技术与实战》专栏

转载于:https://www.cnblogs.com/xiaoguanqiu/p/11301253.html

Python规范:用用assert相关推荐

  1. PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门

    PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门 原文: https://www.cnblogs.com/xxtalhr/p/10 ...

  2. Python中的Assert语句简明教程

    1. 引言 如果你是一个Python新手,那么你可能会在一些代码中看到assert关键字的语句.对于该语句,有人喜欢有人不喜欢,本文重点介绍Assert语句的作用以及什么时候应该使用该语句. 闲话少说 ...

  3. Python中的assert用法

    Python中的assert用法 本文转载自Python中不尽如人意的断言Assertion,如有侵权,立马删除! 使用assert断言是学习Python一个非常好的习惯,Python assert ...

  4. Python规范:提高可读性

    PEP 8 规范 PEP 是 Python Enhancement Proposal 的缩写,翻译过来叫"Python 增强规范". 缩进规范 PEP 8 规范告诉我们,请选择四个 ...

  5. python 错误处理 assert

    Python assert 学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895 817 687有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家一起学 ...

  6. python import 类如何捕获clrt c_PEP8 python规范神器

    一.Jupyter notebook 篇 Jupyter notebook的代码要想写得规范,推荐用Code prettify插件. 1.安装插件Nbextensions 1 pip install ...

  7. python规范pep8_Python—PEP8规范

    Python-PEP8规范 介绍 代码布局 模块导入顺序 空格 注释 注释块 命名风格 应避免的名字 模块名 类名 异常名 全局变量名 函数名 方法名和实例变量名 设计建议 Python思维导图: / ...

  8. 遇到“脏乱差”的Excel数据怎么办??利用Python规范Excel表格数据(数据清洗)

    此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉. 本文章纯野生,无任何借鉴他人文章及抄袭等.坚持原创!! 1. 前言 本文章主要介绍利用Python去规范Exc ...

  9. Google Python Style Guide(谷歌python规范指南)

    来自:Google Python Style Guide 1. 背景 Python是谷歌内部使用的主要动态语言(脚本语言).这份指导手册列出了使用Python的编程人员应该做的和不应该做的. 为了帮助 ...

  10. python写用用户名密码程序_Python创建用户名和密码程序

    我现在只是一个初学者程序员,我正在尝试创建一个用户名/密码程序.这是我的代码如下: username = 'Polly1220' password = 'Bob' userInput = input( ...

最新文章

  1. poj 3728(LCA + dp)
  2. Java面试必备的集合源码详解,砥砺前行!
  3. 在java中柱状图代码_我在java中编写了个柱状图,可运行了,我想让柱状图在JSP页面中显示,请问有什么方法么?谢谢。...
  4. 华为系统10.0是鸿蒙吗,暂时忘记鸿蒙!华为EMUI 10.0发布时间确认:这才是主角...
  5. 最大公约数python语言算法_使用Python求解最大公约数的实现方法
  6. 支持XML的公司和它们的开发工具有哪些?
  7. EncryptionHelper.cs(20170223)
  8. mariadb mysql同步_MySQL(Mariadb)主从同步基础
  9. 期货一个价格变动对应价值变化
  10. mysql canal 安装测试_canal安装配置与mysql操作监听,我已经帮你踩过了所有的坑...
  11. SD卡中FAT32文件格式高速入门(图文具体介绍)
  12. 常用liunx / mysql命令
  13. 在中国搞技术只能混碗饭吃,没有太大希望
  14. Linux之Shell编程学习总结
  15. 苹果手机各种尺寸详细表苹果X、苹果XS、苹果XR、苹果XSMax、苹果11、苹果11 Pro、苹果 11 Pro Max 、苹果12、苹果12mini、苹果 12 Pro Max、苹果12pro 尺寸
  16. 回归方法(一):用线性回归探究生育率
  17. 苹果手机配什么无线蓝牙耳机好?适配苹果手机的蓝牙耳机推荐
  18. 添加网络计算机名,windows10系统,更改计算机名后,网络中看不见自己的电脑了。...
  19. 亲测可行ie8与ie11共存方法支持win7x64等
  20. 《C语言程序设计》江宝钏主编-习题5-3-动态最大值!!!

热门文章

  1. Redis高可用方案:sentinel(哨兵模式)以及springboot整合sentinel模式
  2. SpringBoot配置多数据源(动态切换)
  3. Spring异步切面源码解析
  4. ieee trans pami latex模板
  5. 解决Instruments检测内存泄漏时真机无法定位的问题
  6. 获取单个数据库的邮箱数量
  7. AI为移动医疗APP加码,智能提醒你:该吃药了!
  8. 导出excel乱码问题
  9. 第五天 面向对象软件分析与设计
  10. U-boot在S3C2440上的移植详解(二)