python3的异常处理

#使用异常处理,可以在程序因发生异常时继续往下执行。若没有异常处理,程序在发生异常时就会退出


1.异常处理的基本语法

2.常用的异常名

3.except 语句的几种用法

4.raise手工抛出异常

5.assert语句抛出异常

6.自定义异常类


1.异常处理的基本语法

Python中使用 try 语句来处理出现的异常, try 语句中也可以有一个 else语句块,表示若未发生异常。一般的 try 语句基本形式如下:

try:
   <语句块1>             #可能产生异常的语句
except <异常名1>:     #要处理的异常
   <语句块>               #异常处理语句
except <异常名2>:     #要处理的异常
   <语句块>               #异常处理语句
.........
else:         
   <语句块>               #未触发异常,则执行改语句
finally:
   <语句块>               #无论是否触发 异常,都执行此语句

其中 else 和 finally 是可选的。


def fun(index):
    lt = [1,2,3]
    try:
        print(lt[index])
    except IndexError:
        print("Index Error")
    else:
        print("Index OK!")

if __name__ == '__main__':
    fun(5)
    fun(1)
    
'''
#打印结果:
Index Error
2
Index OK!
'''



2.常用的异常名

异常名描述
AttributeError调用不存在的方法引发的异常
EOFError遇到文件结尾引发的异常
ImportError导入模块出错引发的异常
IndexError列表越界引发的异常
IOErrorI/O操作引发的异常,如打开文件出错
KeyError使用字典中不存在的关键字引发的异常
NameError使用不存在的变量名引发的异常
TabError语句块缩进不正确引发的异常
ValueError搜索列表中不存在的值引发的异常
ZeroDivisionError除数为零引发的异常


3.except语句的几种用法

1. except:                                           #捕获所有异常;

2. except <异常名>:                            #捕获指定异常;

3. except (异常名1,异常名2):              #捕获异常1或者异常2

4. except <异常名> as <数据>:            #捕获指定异常及其附加数据

5. except (异常名1,异常名2) as <数据> #捕获异常1或者异常2及其异常的附加数据


4.raise手工抛出异常
使用raise 可以抛出各种预定的异常,即使在程序运行时根本不会引发该异常

raise 的使用:

raise 异常名

raise 异常名,附加数据

raise 类


示例:

def fun():
   for i in range(5):
       try:
           if i == 2:
               raise NameError
       except NameError:
           print("get NameExcept")

if __name__ == '__main__':
    fun()

'''
#打印结果:
get NameExcept
'''


5.raise语句抛出异常

assert语句也是会抛出异常的,一般形式是: assert 条件   。当条件为假时,就会抛出AssertionError异常。

def fun():
   for i in range(5):
       try:
           assert i<2   #当 i >=2时,就会触发异常
       except AssertionError:
           print("get AssertionError")

if __name__ == '__main__':
    fun()

'''
#打印结果:
get AssertionError
get AssertionError
get AssertionError
'''

assert语句一般用于在程序开发时测试代码的有效性,比如某个变量的值必须在一定范围内,而当运行时得到的值不符合要求,则引发异常,对开发者提醒。所以一般在程序开发中,都不去捕获这个异常,而是让它中断程序。原因是程序出现了问题,不应继续运行。


6.自定义异常类

在python中自定义异常类只需要继承 Exception 类即可。如:

class MyError(Exception):
    pass
这就是一个简单的异常类。

class MyException(Exception):
    def __init__(self,test):
        self.test = test
    def __str__(self):
        return self.test

if __name__ == '__main__':
    raise MyException('MyException!!!')
'''
#打印结果:
Traceback (most recent call last):
  File "C:/Users/abc/PycharmProjects/untitled3/1", line 8, in <module>
    raise MyException('MyException!!!')
__main__.MyException: MyException!!!

'''
可以看到通过调用 raise语句,可以成功抛出自定义的异常MyException


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值