python-异常处理
Posted 我是小旋风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-异常处理相关的知识,希望对你有一定的参考价值。
异常和错误
try中的代码
一旦在一个地方发生错误
后面的代码就不执行了
会直接跳到except的位置
一个错误类型只能处理一种错误
出现异常之后#比如上面的例子出现indexerror错误,会先执行到valueerror,在往下找
会从上到下去执行except中的error
一旦匹配上就会执行except中的代码
执行完之后不再执行其他except
l =[1,2,3,4] try: num = int(input(\'num:\')) print(l[num]) except ValueError: print(\'请输入一个数字\') except IndexError: print(\'输入的数字超出范围\')
万能异常
l =[1,2,3,4] try: num = int(input(\'num:\')) print(l[num]) except: #如果不写 所有的错误都能处理 print(\'万能的异常\') #另一种写法 l =[1,2,3,4] try: num = int(input(\'num:\')) print(l[num]) except Exception: #万能异常 print(\'万能的异常\')
但是万能异常有个缺陷,就是没有办法打印出到底是什么错误,那怎么解决
l =[1,2,3,4] try: num = int(input(\'num:\')) print(l[num]) except Exception as e: #万能异常,能打印出错误原因\'e\'可以是任意字符,习惯用法 print(e) #那么万能异常 怎么使用 #有多个except的时候,万能异常永远发在最后 l =[1,2,3,4] try: num = int(input(\'num:\')) print(l[num]) except ValueError: print(\'请输入一个数字\') except IndexError: print(\'输入的数字超出范围\') except Exception as e:#在最后位置 print(e)
else中的代码 在try中的代码全部顺利执行之后才执行
如果try中的代码出现错误,那么else就不执行
什么时候用呢?
在代码顺利执行的时候,报成功或者报结果的时候使用的
try except格式
try except else格式 else必须放在最后
try except else finally格式
try finally格式
finally:不管代码是否出错,都是一个无论如何会执行的代码
l =[1,2,3,4] try: num = int(input(\'num:\')) print(l[num]) except ValueError: print(\'请输入一个数字\') except IndexError: print(\'输入的数字超出范围\') else: print(\'执行我了\') finally: print(\'最后执行\')
finally
finally:不管代码是否出错,都是一个无论如何会执行的代码 打开的操作系统的资源不管代码执行是否出错,都应该归还 所以这样的代码就应该写在finally中 def func(): try: f = open(\'file\',\'w\') content = f.read() return content #在这执行完后,要返回,就不会归还资源 finally: f.close() #在这里归还资源,无论怎样 都执行finally
主动抛出异常
#主动的抛出一个异常 raise TypeError#会报错 但在这里没有提示 raise TypeError(\'出现了不可思议的TypeError\') raise ValueError(\'出现了不可思议的TypeError\')
assert断言
#像当于一个条件判断,满足条件通过,不满足报错 assert 1 == 2 print(\'qwe\')
自定义异常
class EvaException(BaseException): #必须继承baseexcepyion def __init__(self,msg): self.msg = msg def __str__(self): 这个方法可以省略,在父类里面有这个方法 return self.msg eva = EvaException(\'类型错误\') #就是实例化一个对象 print(eva)
class EvaException(BaseException): #必须继承baseexcepyion def __init__(self,msg): self.msg = msg def __str__(self): return self.msg try: raise EvaException(\'类型错误\') except EvaException as e:#这里边的\'e\'就是一个类EvaException的对象 就是一个实例化的过程 print(e)
以上是关于python-异常处理的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 多处理进程中运行较慢的 OpenCV 代码片段