关键词:
我们在编写程序的时候或多或少都出现过异常,也许是不小心,也可能是逻辑错误亦或是程序以外的问题,比如环境的问题,不管是什么原因,异常是我们不希望看到的.接下来,我们就什么是异常,遇到异常如何解决展开唠唠
1.什么是异常
异常会让我们的程序跳出正常的运行,异常给我们带来的损失,不容小觑.我们经常听到的是机器的异常.比如工厂流水线上的机器设备,某个零件出问题了,机器不能正常运行或者生产流程错乱;快递分拣设备传送带出现断裂,或者电机出现问题不能正常分拣;还有我们现在最火的自动驾驶汽车,如果汽车在路上行驶时雷达失灵.程序错乱.摄像头设备无法正常检测识别,等等.这些都是异常.如果不能快速排除异常,不但会导致生产停滞,还威胁到生命安全,会造成很大的损失.
上述情况正是异常要做的,我们可以在恰当的地方添加异常.若是出现例外,终止流程进入异常管理.在异常管理器中完成对当前异常的处理,让流程维持在正常的轨道上.
2.异常的作用
上面我们了解了什么是异常,但在程序中,异常的作用不仅仅只是用于排除例外.异常具体的作用如下:
错误处理
在程序运行中发生错误时,python会向外抛出异常,Python中有默认的异常处理机制,他会停止程序运行,打印错误信息,我们还可以自己捕捉异常并从异常中恢复.
时间通知
异常也可以用于向外抛出程序的状态信息
终止运行
使用Python的try/finally语句可以确保无论是否有异常都会执行finally中的语句
3.异常与错误
异常和错误是不一样的,即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。下面我们通过例子来说明;
Print("你好!")
报错:
从报错中可以看出,是Print没有定义,也就是不存在Print这样一个函数,Python中是区分大小写的.打印函数正确的是print().除非你自定义一个Print()函数.其实如果你使用PyCharm去编写代码,你写来未运行就已经提示错误,如图:
while True print(Hello world)
报错:
这个是语法格式错误.
input(请输入内容:)
上面的代码本身没有错误,但是在输入的时候,此时我们按下Ctrl+D键,这是一个文件结束符号.但是它不应该出现在这里,所以Python就会抛出异常.并指出这是一个EOFError,使用Python默认的处理方式,立即终止程序.
异常和错误有什么区别呢:
错误:
错误可分为语法错误和逻辑错误
语法错误说明代码不符合语言的语法规范
逻辑错误说明代码编写逻辑上的错误,程序不会报错但是执行的结果不符合预期
异常:
程序是可以运行的,但是在运行过程中遇到错误会导致程序意外退出
4.异常处理
如果是语法的错误,程序本身是无法执行的,我们是无法从程序抛出的异常去处理的,只能调整代码本身.但是异常是在程序运行过程中可能出现的,我们可以通过捕捉可能出现的异常并加以处理,保持程序正常运行;
上面input()的异常我们可以捕捉并处理:
try:
input(请输入内容:)
except EOFError: #捕捉EOFError
print("输入错误")
else:
print("输入正确")
print("继续...")
输出结果:
上面的例子使用了try...except.当try语句用于捕获异常并从中恢复时,至少要有一句except与之对应,因为仅仅抛出异常是没有用的.如果异常没有被处理.那么Python就会调用默认的处理方式,停止执行并在终端打印出错误信息.
5.常见异常
OverflowError:数值超出最大限制,比如数组下标越界
ZeroDivisionError:除(或取模)零
OSError:操作系统错误
StopIteration:迭代器没有更多的值
FloatingPiontError:浮点计算错误
IOError:输入/输出操作失败
MemoryError:内存溢出错误(对于解释器不是致命的)\\
EOFError:没有内建输入到达EOF标记
以上这些对于编程中的复杂环境来说还是不够的.因此Python允许我们自己定义异常类型并且通过raise语句来引发;我们要注意的是,自定义的异常必须是直接或间接从属于Exception类的派生类.
下面通过模拟车辆无油状态的提示体验一下:
#模拟车辆无油
class NoGas(Exception):
def __init__(self, state):
Exception.__init__(self)
self.state = state
state = "无油"
try:
if state != "yes":
raise NoGas(state)
except NoGas as ng:
print("油表显示状态: 0,正在检测..".format(state))
print("正在加油!")
print("加油完成!")
finally:
print("若加完油,车辆可继续行驶\\n")
运行结果:
finally语句不管try里面代码发生了什么都会执行.
6.finally语句
finally语句一定会在最后执行,所以finally语句也被称为终止行为或者是清理语句,我们在操作文件的时候一般会把File.close()关闭文件的语句放到finally,保证程序运行完必须关闭打开的文件,或者使用with 语句来保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法,其实with也是封装了 try…except…finally 编码范式,提高了易用性
try:
input("请输入:")
finally:
print("结束")
print("程序完成")
运行结果:
使用finally文件关闭:
file = open(./test.txt, w)
try:
file.write(你好)
finally:
file.close()
使用with:
with open(./test.txt, w) as file:
file.write(你好)
总结
异常是一种比较高级的控制流设备.他可能是由Python引发,也有可能是由程序本身引起.在写代码时要先分析并选取异常条件.这里只是抛转引玉,还有更多异常有关的使用场景等你发掘.异常的处理在开发中是非常重要的一环,一定要熟练掌握异常机制的应用
python从入门到精通python的编码规范,标识符知多少?(代码片段)
...三连哦。这是Pyhon系列文章的第三篇,本文主要介绍Python程序的编码规范。干货满满,建议收藏,需要用到时常看看。小伙伴们如有问题及需要,欢迎踊跃留言哦~~~。文章目录前言注释缩进规则编码规范标识符命... 查看详情
事件总线知多少
ImplementinganeventbuswithRabbitMQforthedevelopmentortestenvironmentAbpEventBus 查看详情
事件总线知多少
ImplementinganeventbuswithRabbitMQforthedevelopmentortestenvironmentAbpEventBus 查看详情
网页制作知多少
网页制作知多少一、通用模板:<!DOCTYPEhtml><htmllang=”en”> <head> <meta charset=”UTF-8”/> &nb 查看详情
unitofwork知多少(代码片段)
原文链接:https://www.cnblogs.com/sheng-jie/p/7416302.html1.引言Maintainsalistofobjectsaffectedbyabusinesstransactionandcoordinatesthewritingoutofchangesandtheresolutionofconcurrencyproblems.UnitofWork 查看详情
ython的高级特征你知多少?来对比看看(代码片段)
Python多好用不用多说,大家看看自己用的语言就知道了。但是Python隐藏的高级功能你都get了吗?本文中,作者列举了Python中五种略高级的特征以及它们的使用方法,快来一探究竟吧!Python是一种美丽的语言,它简单易用却非常强... 查看详情
overflow知多少
本文地址: http://www.hicss.net/some-overflow-knowledge/最近在研究OOCSS,当打开template.css阅读第一行时,震惊了,第一眼居然没看懂。。。。。。以下就是OOCSS下的template.css第一行代码:12.body{overflow:hidden;_overflow:visible;_zoom:1;}.main{overflo 查看详情
产品开发知多少一
为什么要进行产品开发?1.市场需求使然,获取商业价值;2.公司战略需要,为公司的战略目标打基础;3.技术发展需求,做公司核心技术积累;开发产品依据?1.企业目标2.战略部署3.技术积累4.市场需求组织中谁来进行产品开发... 查看详情
ffmpeg知多少~~~
一、ffmpeg安装:https://jingyan.baidu.com/article/f7ff0bfcd64cea2e26bb1334.html 二、ffmpeg视频处理(包括各种视频流处理~):三、ffmpeg推流步骤:1)通过ffmpeg截取指定长度的视频流:ffmpeg-t10-irtsp://xxx:xxxxx1234@172.20.xx.xxx:55410s_out 查看详情
__attribute__你知多少(代码片段)
__ATTRIBUTE__你知多少?GNUC 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(FunctionAttribute )、变量属性(VariableAttribute )和类型属性(TypeAttribute )。__attribute__ 书写特征是:__attribu 查看详情
typeof知多少
昨天同事给我看了一道代码题,是关于typeof的,感觉挺有意思的,在这里分享给大家,顺便自己再对typeof总结总结。如有不对,请给予指出,共同进步。代码是这样的:<!DOCTYPEhtml><head><title>typeof</title><metahttp-... 查看详情
射频&天线设计-db知多少
《射频&天线设计-dB知多少》在调试射频输出功率时经常听到“相差多少dB”,刚入门的话听得一脸懵逼,当然这种通俗单位别人也懒得跟你解释。分贝(dB)是一个对数单位(logarithmicunit),最初用... 查看详情
射频&天线设计-db知多少
《射频&天线设计-dB知多少》在调试射频输出功率时经常听到“相差多少dB”,刚入门的话听得一脸懵逼,当然这种通俗单位别人也懒得跟你解释。分贝(dB)是一个对数单位(logarithmicunit),最初用... 查看详情
玩转springboot原理篇(核心注解知多少)(代码片段)
type=FilterType.CUSTOM,classes=TypeExcludeFilter.classtype=FilterType.CUSTOM,classes=AutoConfigurationExcludeFilter.classSpringBootApplicationSpringBootConfigurationComponentScanEnableAutoConfiguratio 查看详情
电磁屏蔽知多少?
原文来自公众号:工程师看海不管什么电子产品,EMC始终是其需要面对的问题,EMC全拼是ElectromagneticCompatibility即电磁兼容性,EMC分为EMS(electromagneticsusceptibility)电磁抗扰度和EMI(Electromagneticinterfere 查看详情
overflow知多少(转)
最近在研究OOCSS,当打开template.css阅读第一行时,震惊了,第一眼居然没看懂。。。。。。以下就是OOCSS下的template.css第一行代码:12.bodyoverflow:hidden;_overflow:visible;_zoom:1;.mainoverflow:hidden;_overflow:visible;_zoo 查看详情
第一讲测试知多少
1.1计算机基础1.1.1计算机相关定义◆软件和硬件:软件:当电脑启动时的应用程序,应用软件(腾讯,qq,有道云,有道翻译)、系统、网页、驱动(看得见、摸不着)硬件:计算机的硬件是计算机的各种设备的总称,分为五个... 查看详情
css知多少(11)——position
1.引言 本文将用一篇文章介绍position(定位),在学习position之前,我们应该去思考一个问题:什么情况下我们需要定位?如果没有定位将无法满足我们怎样的需求?我们要知道,被人类创造出来的每一个知识,都有它的用途... 查看详情