Python异常知多少

简介: 我们在编写程序的时候或多或少都出现过异常,也许是不小心,也可能是逻辑错误亦或是程序以外的问题,比如环境的问题,不管是什么原因,异常是我们不希望看到的.接下来,我们就什么是异常,遇到异常如何解决展开唠唠1.什么是异常异常会让我们的程序跳出正常的运行,异常给我们带来的损失,不容小觑.我们经常听到的是机器的异常.比如工厂流水线上的机器设备,某个零件出问题了,机器不能正常运行或者生产流程错乱;快递分拣设备传送带出现断裂,或者电机出现问题不能正常分拣;还有我们现在最火的自动驾驶汽车,如果汽车在路上行驶时雷达失灵.程序错乱.摄像头设备无法正常检测识别,等等.这些都是异常.如果不能快速排除异常,不但

我们在编写程序的时候或多或少都出现过异常,也许是不小心,也可能是逻辑错误亦或是程序以外的问题,比如环境的问题,不管是什么原因,异常是我们不希望看到的.接下来,我们就什么是异常,遇到异常如何解决展开唠唠


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类的派生类.


下面通过模拟车辆无油状态的提示体验一下:


#模拟车辆无油classNoGas(Exception):
def__init__(self, state):
Exception.__init__(self)
self.state=statestate="无油"try:
ifstate!="yes":
raiseNoGas(state)
exceptNoGasasng:
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:

withopen('./test.txt', 'w') asfile:
file.write('你好')


总结


异常是一种比较高级的控制流设备.他可能是由Python引发,也有可能是由程序本身引起.在写代码时要先分析并选取异常条件.这里只是抛转引玉,还有更多异常有关的使用场景等你发掘.异常的处理在开发中是非常重要的一环,一定要熟练掌握异常机制的应用

目录
相关文章
|
4月前
|
Python
Python基础教程(第3版)中文版 第8章 异常(笔记)
Python基础教程(第3版)中文版 第8章 异常(笔记)
|
3月前
|
Unix API Python
【Python】已完美解决:(Python3.8异常)AttributeError: module ‘time‘ has no attribute ‘clock‘
【Python】已完美解决:(Python3.8异常)AttributeError: module ‘time‘ has no attribute ‘clock‘
65 0
|
11天前
|
人工智能 数据可视化 搜索推荐
Python异常模块与包
Python异常模块与包
|
2天前
|
开发者 索引 Python
Python常见的异常总结
Python 中的异常是一个非常广泛的主题,因为它包含许多内置的异常类型,这些类型可以处理各种运行时错误。
11 0
|
5月前
|
索引 Python
Python中的异常处理与自定义异常
Python中的异常处理与自定义异常
48 0
|
3月前
|
数据采集 存储 Java
如何让Python爬虫在遇到异常时继续运行
构建健壮Python爬虫涉及异常处理、代理IP和多线程。通过try/except捕获异常,保证程序在遇到问题时能继续运行。使用代理IP(如亿牛云)防止被目标网站封锁,多线程提升抓取效率。示例代码展示了如何配置代理,设置User-Agent,以及使用SQLite存储数据。通过`fetch_url`函数和`ThreadPoolExecutor`实现抓取与重试机制。
如何让Python爬虫在遇到异常时继续运行
|
2月前
|
API C++ Python
【Azure 应用服务】Python fastapi Function在Azure中遇见AttributeError异常(AttributeError: 'AsgiMiddleware' object has no attribute 'handle_async')
【Azure 应用服务】Python fastapi Function在Azure中遇见AttributeError异常(AttributeError: 'AsgiMiddleware' object has no attribute 'handle_async')
|
3月前
|
机器学习/深度学习 运维 监控
使用Python实现深度学习模型:智能安防监控与异常检测
【7月更文挑战第26天】 使用Python实现深度学习模型:智能安防监控与异常检测
54 6
|
2月前
|
存储 Python
Python 中的用户定义异常
【8月更文挑战第23天】
23 0
|
2月前
|
前端开发 JavaScript Java
Python错误、异常和模块
本文详细介绍了Python编程中的错误和异常处理以及模块的使用方法。语法错误如遗漏引号会导致`SyntaxError`,而运行时错误如除以零则会产生`ZeroDivisionError`等异常。文章通过实例展示了如何使用`try...except`结构来捕获并处理异常,确保程序的健壮性。此外,还介绍了如何自定义异常以及主动抛出异常的方法。在模块方面,文章解释了如何创建和导入模块以重用代码,并展示了不同导入方式的特点,包括导入单个函数、全部内容等。最后提到了Python标准库的使用和查询模块内容的方法。