我们的程序目前的情况是:有一点小错误或小意外立刻就崩溃、撂挑子不干。这就好比咱们得了小感冒不仅头疼脑热,还立马昏厥过去人事不省。
虽然咱们不提倡生病了还坚持工作,但感冒了该休息休息该看医生看医生,不能因为这个整个身体就罢工停止运作呀。
所以我们的程序必须具备应对意外和错误的能力:给出提示,对错误进行相应处理,后续程序该怎么运行还怎么运行。
码农中有个段子,“Writing code accounts for 90 percent of programming. Debugging code accounts for the other 90 percent.”。
就是说编码占开发工作量的90%,调试占另外90%。可您这加起来好像都180%了?是啊,要不怎么解释软件项目总拖延交付呐!。
这也说明在专业开发人员的程序是bug不断滴,那咱们的程序里有点bug就更稀疏平常啦。
bug指程序中的手误啊意外啊错误啊什么的。
关于bug这个词的来源:据说是计算机还是巨无霸时代,工作人员调试早期电子计算机Mark II时,发现错误是卡里面的一只飞蛾导致的。于是工作人员小心地把飞蛾取出来,放在了Grace Hopper计算机日志上......
Grace Hopper是一位女性科学家,码农这个行业的先驱
谁说没有女码农?!来,跟我一起哼豫剧表演艺术家常香玉《花木兰》里那句:”这女码农,哪一点不如儿男!“
Grace hopper有个外号Amazing Grace,她倡导独立于机器的编程语言,促进了一种Cobol这门开发语言的出现。
回到对付bug:为了捕获和应对程序中的bug,在这个视频里我们分享了python对程序可能遇到的意外或错误的一整套处理手段:try ... except ... else ... finally ...,raise。
意外和错误是程序的组成部分,只要我们应对得当,它们系掀不起什么大浪哒。
我有一个坏习惯:调试程序时喜欢用print语句深入程序内部,输出中间结果。然后程序调试结束后要花很多时间来清除为调试而添加的print。
Python有专门干这个的logging,logging 对我们了解程序内部发生了什么,按什么顺序发生有很大帮助。
程序运行到设置的logging点时,可以列出任何指定的变量值;如果该出现的logging没出现,那说明部分代码被直接跳过了...这些都可以帮助我们判断程序是不是按照我们的预期在运行。
最棒的是logging这种方法,不管之前放了多少条,只一条命令就可以把它们的影响全部清除,实属居家旅行必备之良药。logging的日志信息是给编程的我们看的,不是给用户看的哈。
最后我们介绍了assert,据说这条语句可以帮助编程的我们节约很多时间。