Python中assert函数的用法小结_grey_csdn的博客-程序员宅基地

技术标签: Python  

写程序的时候加上更加严谨的检查的习惯是我前不久刚刚学到的,之前纵然知道这很有用也很有必要,但是从来没有主动去尝试过。年前看了一本国外一个人写的C语言数据结构与算法讲义之后,觉得以后自己的软件中也有必要加上这种类似的检测,甚至说我常用的一些小脚本也有必要把这个加进去。

从15年下半年开始,我用的脚本语言Python居多,今天就大致总结一下Python中这种检测以及终止程序的方式。

Python中常用的一种方式是适用assert,最初在教程中看到有这个用法的时候只是浏览了一下就跳过了,感觉这个东西对我来说没用。后来学习MIT的6周公开课,简单的把这个功能学了一下,不过依然没有在我自己的代码中使用。后来大量使用已经是我前面提到的时间点以后了。

assert,通常在中文译本的教程活着书籍中翻译成断言。我觉得掌握这个常用的功能还得从文字具体的含义上来,不能够简单的记住这么一个名词或者是说法。断言,在中文的含义中看来是表达时分确定、十分肯定的含义。这样,这个函数后面参数对函数结果的影响也就明确了,只有当我十分确定的情况发生时才不会有错误。

编写如下代码测试:

  1 #!/usr/bin/python

  2 

  3 import os

  4 

  5 dir_info = os.listdir('./')

  6 assert('config.PNG' in dir_info)

  7 


代码测试,结果如下:

GreydeMac-mini:vim greyzhang$ vim assert_demo.py

GreydeMac-mini:vim greyzhang$ ls

assert_demo.py code_after.PNG code_before.PNG config.PNG

GreydeMac-mini:vim greyzhang$ python assert_demo.py 

GreydeMac-mini:vim greyzhang$ rm config.PNG 

GreydeMac-mini:vim greyzhang$ ls

assert_demo.py code_after.PNG code_before.PNG

GreydeMac-mini:vim greyzhang$ python assert_demo.py 

Traceback (most recent call last):

  File "assert_demo.py", line 6, in <module>

    assert('config.PNG' in dir_info)

AssertionError

GreydeMac-mini:vim greyzhang$ 


可以看出,当判断的文件存在时,使用断言说明文件存在程序运行没有任何错误。而删除断言中判断的存在文件之后,程序运行时候报错。实际上,断言的条件不成立时程序是直接报错并且终止执行。这不仅仅是保证程序运行可靠的一种方式,同时也算是一种程序问题定位的一种手段。因为程序运行停止时,错误信息会给出出现错误所在的代码行,而相应的条件都是程序员自己设定的,比较容易排查。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/grey_csdn/article/details/54430091

智能推荐

CentOS7 修改yum源为阿里源(无坑)_Lxiasen的博客-程序员宅基地

1.备份本地yum源(避免下载崩溃用于回滚[重命名即可])[[email protected] ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak2.下载阿里yum源配置文件[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo3.更新y

浮点数/float/double 是否需要考虑网络字节序的问题_什么数据类型需要考虑字节序_yangshuanbao的博客-程序员宅基地

在网络上传输数据时,对整数,我们使用转换为网络字节序的方法,来保证跨平台传输数据时不会出现字节顺序问题导致的解析错误,但是对浮点数,是否也需要这样做?在socket编程中,只有针对整型的字节顺序转换函数,例如htonl(),htons()等,浮点数怎么办? 问:为什么在网络编程中,需要考虑字节序的问题时,对于double、float以及字符串等数据类型不需要考虑主机序列和网

curl_getinfo的巧用_weixin_33770878的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

Ubuntu18.04离线安装pytorch_gpu版本教程_ubuntu18.04 torch安装_閤廴聿的博客-程序员宅基地

由于没有网络,只能离线安装,下载对应的包,进行安装1.安装显卡驱动:根据购买的显卡型号进行安装下载地址:https://www.nvidia.cn/Download/index.aspx?lang=cn安装教程可以参考:https://www.nvidia.cn/Download/index.aspx?lang=cn我是购买的时候厂家就给我安装好了,所以我就直接安装cuda+cudnn了。如果是自己安装显卡驱动的话,注意了,需要切换到F2的命令行去安装,不能ubuntu的桌面进行安装,我的是两张3

数据结构课设--7最小生成树问题_ddqb3235的博客-程序员宅基地

14、最小生成树问题(**)【问题描述】若要在n个城市之间建设通信网络,只需要假设n-1条线路即可。如何以最低的经济代价建设这个通信网,是一个网的最小生成树问题。【系统要求】1.利用克鲁斯卡尔算法求网的最小生成树。2.利用普里姆算法求网的最小生成树。3.要求输出各条边及它们的权值。【测试数据】由学生任意指定,但报告上要求写出多批数据测试结果。【实现提示】通信线路一...

Matlab学习笔记(1)—数据拟合_阿孟dede的博客-程序员宅基地

主要讲解Matlab中多项式拟合与概率曲线拟合的相关函数使用

随便推点

为hdfs配置kerberos_weixin_34082854的博客-程序员宅基地

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

一行多列的下拉多选框_多列多选框_c_java菜鸟的博客-程序员宅基地

一行多列的下拉多选框很简单的一行多列的下拉多选框,就当是学习编写jquery插件的例子,该例子依赖jquery相关js代码:/** * 下拉多选插件,支持一行显示过个input框,显示多行 * by liangsu */(function($){ "use strict"; var SelectCheckBox = function(element, options){

android /data/system/dropbox,Android导出dropbox日志_柳不是刘的博客-程序员宅基地

文章内容已重新排版:Android导出dropbox日志,请到该链接浏览,谢谢支持。大项目中出现anr几乎是必然事件,这里我就不再去赘述怎么分析anr日志了。但是作为分析anr重要依据的必然离不开dropbox日志。问题来了,dropbox文件目录路径一般是/data/system/dropbox/,开发时我们当然能直接把日志拉出来。但是,外面用的正式版的机器我们是没有读取这个目录的权限的,即使你...

Shell-diff用法_shell diff 忽略格式_湫兮若风的博客-程序员宅基地

文章目录1. 命令作用2. 语法3. 常用参数4. 小案列1. 命令作用逐行比较,告诉我们怎么把第一个文件改为第二个文件。显示出第一个文件和第二个文件的差异。2. 语法diff [options] file1.txt file2.txt # file1为比较文件 file2为基准比较文件.3. 常用参数 -b:不检查空格 -B:不检查空白行 -i:不检查大小写 -w:忽略所...

RAC第一个节点被剔除集群故障分析_cri3224的博客-程序员宅基地

对于管理RAC的dba来说,肯定遇到过某一个节点被另一个节点reboot,其实出现这样的原因很多,但大多数情况,都是由于某个节点的资源(cpu,内存,磁盘,网络等)出现了问题,阻碍了节点间的通信,为保证数据的完整性以及R...

推荐文章

热门文章

相关标签