专栏名称: Python小屋
清华出版社《Python程序设计》系列教材作者董付国的Python小屋。介绍Python基础语法知识、标准库、扩展库知识,探讨Python在各领域的应用。
目录
相关文章推荐
Python爱好者社区  ·  英伟达憾失DeepSeek关键人才?美国放走 ... ·  昨天  
Python爱好者社区  ·  DeepSeek创始人梁文锋个人履历 ·  3 天前  
Python爱好者社区  ·  离谱!下载DeepSeek最高判刑20年? ·  2 天前  
Python爱好者社区  ·  1885页的Python完全版电子书 ·  3 天前  
Python开发者  ·  o3-mini 碾压 DeepSeek ... ·  5 天前  
51好读  ›  专栏  ›  Python小屋

千字14图--Python慎用assert语句阻止代码执行

Python小屋  · 公众号  · Python  · 2021-02-11 09:10

正文

明天不发文,提前祝所有朋友

过年好,春节快乐!

推荐图书:

《Python程序设计(第3版)》, (ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月 第1次印刷,2021年1月第6次印刷, 山东省一流本科课程“Python应用开发”配套教材 清华大学出版社2020年度畅销图书(本书第二版为2019、2020年度畅销图书)

京东购买链接: https://item.jd.com/12668739.html

天猫、当当均有销售,可以选择自己常用平台搜索“董付国 第3版”找到本书。
配套资源: 教学大纲、电子教案、微课视频、PPT课件、例题源码、习题答案、考试系统。
适用专业: 计算机、网络工程、软件工程以及相关专业。
适用学时: >=64
页数: 381
定价: 59.8
教学大纲: 《Python程序设计(第3版)》配套 教学大纲
习题答案: 《Python程序设计(第3版)》课后 习题答案


目录(二级)


第1章  基础知识/1

1.1  如何选择Python版本

1.2  Python安装与简单使用

1.3  使用pip管理扩展库

1.4  Python基础知识

1.5  Python代码编写规范

1.6  Python文件名

1.7  Python程序的__name__属性

1.8  编写自己的包

1.9  Python快速入门

1.10  The Zen of Python

第2章  Python数据结构/31

2.1  列表

2.2  元组

2.3  字典

2.4  集合

2.5  其他数据结构

第3章  选择与循环/67

3.1  运算符与条件表达式

3.2  选择结构

3.3  循环结构

3.4  break和continue语句

3.5  综合运用

第4章  字符串与正则表达式/83

4.1  字符串

4.2  正则表达式

第5章  函数设计与使用/115

5.1  函数定义

5.2  形参与实参

5.3  参数类型

5.4  return语句

5.5  变量作用域

5.6  lambda表达式

5.7  案例精选

5.8  高级话题

第6章  面向对象程序设计/138

6.1  类的定义与使用

6.2  类的方法

6.3  属性

6.4  特殊方法与运算符重载

6.5  继承机制

第7章  文件操作/158

7.1  文件基本操作

7.2  文本文件基本操作

7.3  二进制文件操作

7.4  文件级操作

7.5  目录操作

7.6  案例精选

第8章  异常处理结构与程序调试/181

8.1  基本概念

8.2  Python异常类与自定义异常

8.3  Python中的异常处理结构

8.4  断言与上下文管理

8.5  使用IDLE调试代码

8.6  使用pdb模块调试程序

第9章  GUI编程/199

9.1  tkinter基础

9.2  tkinter精彩编程

第10章  网络程序设计/230

10.1  计算机网络基础知识

10.2  UDP和TCP编程

10.3  Socket编程案例精选

10.4  网页内容读取与网页爬虫

第11章  安卓平台的Python编程/248

11.1  QPython简介

11.2  安卓应用开发案例

第12章  Windows系统编程/254

12.1  注册表编程

12.2  创建可执行文件

12.3  调用外部程序

12.4  创建窗口

12.5  判断操作系统版本

12.6  系统运维

第13章  多线程与多进程编程/273

13.1  threading模块

13.2  Thread对象

13.3  线程同步技术

13.4  多进程编程

第14章  数据库编程/294

14.1  SQLite应用

14.2  访问其他类型数据库

第15章  多媒体编程/306

15.1  图形编程

15.2  图像编程

15.3  音乐编程

15.4  语音识别

15.5  视频处理和摄像头接口调用

第16章  逆向工程与软件分析/328

16.1  主流项目与插件简介

16.2  IDAPython与Immunity Debugger编程

16.3  Windows平台软件调试原理

16.4  案例精选

第17章  科学计算与可视化/349

17.1  numpy简单应用

17.2  scipy简单应用

17.3  matplotlib简单应用

17.4  数据分析模块pandas

17.5  统计分析模块statistics

第18章  密码学编程/377

18.1  安全哈希算法

18.2  对称密钥密码算法DES和AES

18.3  非对称密钥密码算法RSA与数字签名算法DSA




=======================

问题描述:
很多人习惯在程序中使用assert断言语句来对某些条件进行约束,如果条件不满足就抛出异常,从而强行阻止执行后面的代码。并且,很多资料建议在开发过程中使用assert进行约束,但是要在发布代码之前删除所有的assert语句。这是为啥呢?这样做是否可以呢?
Python程序运行时有个特殊的只读属性__debug__,源码解释运行(包括使用import导入模块)时值为True,这时assert语句起作用,确实可以在特定条件不满足时阻止执行后面的代码。但是,把Python程序源码使用优化模式编译为字节码后运行时,__debug__的值为False,并且在优化编译时会删除所有的assert语句,再也起不到任何的约束和拦截作用,直接执行后面代码时抛出异常。
例如,有源码文件“临时测试专用.py”,内容如下:
执行该程序时报错,最后一条语句被成功拦截,没有执行,如图
接下来,使用标准库py_compile对源码文件进行编译,得到两种优化级别的字节码,如图
切换到命令提示符cmd环境,分别执行源码文件和两个字节码文件,如图






请到「今天看啥」查看全文