python3的异常处理

xiaoxiao2021-02-28  115

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

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

转载请注明原文地址: https://www.6miu.com/read-26167.html

最新回复(0)