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 代码片段

python常用代码片段总结

使用片段中的处理程序时出现非法状态异常

你如何在 python 中处理 graphql 查询和片段?

Java异常处理机制

java 反射代码片段