python异常

一. 异常

异常是python解释器检测到程序的错误时,停止执行并给出错误信息

f = open("t.txt", "r")

print("后面代码执行,程序正常终止")
'''
Traceback (most recent call last):
  File C:\\Users\\11265\Desktop\\code\\venv\\class\\__init__.py, line 1, in <module>
    f = open("t.txt", "r")
FileNotFoundError: [Errno 2] No such file or directory: "t.txt"
'''

 

说明:只读模式打开一个不存在的文件,抛出异常,程序停止

二. 捕获异常和处理:

1. 在程序可能抛异常的地方使用try...except...捕获并处理异常

语法:

try:
    可能发生错误的代码
except:
    如果出现异常执行的代码

示例:

try:
    f = open("t.txt", "r")
except:
    print("处理异常")

print("后面代码执行,程序正常终止")
'''
处理异常
后面代码执行,程序正常终止  
'''

说明:这里捕获的是所有异常

2. 捕获指定异常

可以在except 关键字后面添加异常类名,捕获指定异常

语法:

try:
    可能发生错误的代码
except 异常类型:
    如果捕获到该异常类型执行的代码

示例:

try:
    f = open("t.txt", "r")
except FileNotFoundError:
    print("处理异常")

print("后面代码执行,程序正常终止")
'''
处理异常
后面代码执行,程序正常终止  
'''

说明:如果try后面语句块没有抛出FileNotFoundError,而是抛出其他异常,则异常不会被捕获

3. 捕获多个指定异常

except后面使用小括号,并用逗号隔开多个异常(实际为元组)

语法:

try:
    可能发生错误的代码
except (异常1, 异常2...):
    如果捕获到该异常类型执行的代码

示例:

try:
    f = open("t.txt", "r")
except (FileNotFoundError, NameError):
    print("处理异常")

print("后面代码执行,程序正常终止")
'''
处理异常
后面代码执行,程序正常终止  
'''

4. 可以使用as关键字获取到捕获的异常对象并命名

语法:

try:
    可能发生错误的代码
except (异常1, 异常2...) as 异常对象名:
    如果捕获到该异常类型执行的代码

示例:

try:
    f = open("t.txt", "r")
except (FileNotFoundError, NameError) as e:
    print(type(e))  # <class 'FileNotFoundError'>
    print("处理异常", e)    # 处理异常 [Errno 2] No such file or directory: 't.txt'

5. Exception类捕获所有异常

try:
    f = open("t.txt", "r")
except Exception as e:
    print(type(e))  # <class 'FileNotFoundError'>
    print("处理异常", e)    # 处理异常 [Errno 2] No such file or directory: 't.txt'

说明:捕获的还是FileNotFoundError, 这是多态的一种表现

6. else

try语句块中如果没有出现异常,会执行else语句块,否则不执行

try:
    f = open("t.txt", "r")
except Exception as e:
    print(type(e))  # <class 'FileNotFoundError'>
    print("处理异常", e)    # 处理异常 [Errno 2] No such file or directory: 't.txt'
else:
    print("try语句块中没有异常时执行的代码")  # 未执行

 

7. finally:无论是否有异常,均会执行的代码

try:
    f = open("t.txt", "r")
except NameError as e:
    print(type(e))  # <class 'FileNotFoundError'>
    print("处理异常", e)    # 处理异常 [Errno 2] No such file or directory: 't.txt'
else:
    print("try语句块中没有异常时执行的代码")  # 未执行
finally:
    print("无论无何都会执行的代码")

说明:finally代码块无论如何都会执行,即使except 未捕获到抛出的异常也会执行

8. 异常传递

内存未处理的异常抛出后,在外层可以捕获到

9. 程序中主动抛出异常:

语法:

raise 异常类名(参数)

说明raise后面的语句其实就是创建了一个异常类对象

示例:

try:
    raise NameError()
    f = open("t.txt", "r")
except NameError as e:
    print(type(e))  # <class 'NameError'>
    print("处理异常", e)    # 处理异常

说明:try语句块中一旦抛出异常,这个语句块中后面的代码不再执行,直接执行except语句

10. 自定义异常

创建一个类并继承Exception,即创建了一个自定义异常类

class MyError(Exception):
    def __init__(self):
        self.name = '自定义异常'

    def __str__(self):
        return self.name

try:
    raise MyError()
except MyError as e:
    print(type(e))  # <class '__main__.MyError'>
    print("处理异常", e)    # 处理异常 自定义异常

 

posted @ 2020-12-27 14:05  foreast  阅读(72)  评论(0编辑  收藏  举报