python的异常buzhuo处理

一、python异常处理简介

1、python异常

python用异常对象(exception object)来表示异常情况,遇到错误后,会引发异常,如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
  • 一般情况下,在Python无法正常处理程序时就会发生一个异常。
  • 异常是Python对象,表示一个错误。
  • 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

常见异常:

BaseException	所有异常的基类
KeyboardInterrupt	用户中断执行(通常是输入^C)
Exception	常规错误的基类
StandardError	所有的内建标准异常的基类
ArithmeticError	所有数值计算错误的基类
FloatingPointError	浮点计算错误
OverflowError	数值运算超出最大限制
ZeroDivisionError	除(或取模)(所有数据类型)
AssertionError	断言语句失败

BaseException 是 Exception 的父类,作为子类的Exception无法截获父类BaseException类型的错误

2、异常处理

  • 捕捉异常可以使用try/except语句。
  • try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
  • 如果你不想在异常发生时结束你的程序,只需在try里捕获它。

语法结构如下:

try:
<语句>        #运行别的代码
except <名字><语句>        #如果在try部份引发了'name'异常
except <名字><数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

异常处理语法的工作原理是:

  • 当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

二、异常处理的使用

1、try-except使用

案例1:主要处理被除数为0及列表索引越界异常的

try:
    #此处是抛异常的
    # a = 1/0
    #此处是不抛异常的
    # a = 1 / 2
    #定义一个三个元素的列表
    ll = [1,2,3]
    print(ll[1])
    print("我在异常之后")
#使用被除数为0的异常对象是抓不到索引越界异常的
# except ZeroDivisionError as z:
#可以使用Exception异常类的根类去抓
# except Exception as e:
#     print("抓到了异常:",e)


#还有一种用法就是写多个except去抓
except ZeroDivisionError as z:
    print("抓到了异常:",z)
except IndexError as i:
    print("抓到了异常:",i)
finally:
    print("不管你走的是try还是except语句,最后都要运行finally语句")

print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")

案例2:文件写数据时候的使用

#没有提前准备testfile.log文件
try:
    fh = open(r"e:\testfile.log", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print("Error: 没有找到文件或读取文件失败")
else:
    print("内容写入文件成功")
    fh.close()
    
=======输出结果==========
e盘根目录下自动创建文件testfile.log,并写入文字"这是一个测试文件,用于测试异常!!"
控制台输出:"内容写入文件成功"

案例3:文件读数据时候的使用

#没有提前准备testfile2.log文件
try:
    fh = open(r"e:\testfile2.log", "r")
    print(fh.read())
except IOError:
    print("Error: 没有找到文件或读取文件失败")
else:
    print("内容读取文件成功")
    fh.close()
========输出结果==========
Error: 没有找到文件或读取文件失败


2、raise主动抛出异常

我们可以使用raise语句自己触发异常,一个异常可以是一个字符串,类或对象。

Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数,语法如下:

raise [Exception [, args [, traceback]]]
  • 语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
  • 最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

案例1:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

functionName(0)

=========输出结果==============
Exception: ('Invalid level!', 0)

3、用户自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

案例:自己定义异常类,通过try/except抓取该类进行处理。

class myException(Exception):
    def __init__(self,errorcode,info):
        self.errorcode = errorcode
        self.info = info


try:
    # raise myException('1001',"账户密码错误")
    raise IndexError('1001',"索引越界异常")
except Exception as m:
    print(m)

========输出结果===============
('1001', '账户密码错误')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大兴的王兴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值