Python异常处理学习笔记

1. 异常是什么?

异常是一个事件,在程序运行时发生,影响了程序的正常运行 ,我们需要做的是在程序运行时捕获这些异常,以让程序能够继续执行

open('name.txt','r')
---------------------------------------------------------------------------FileNotFoundError                         Traceback (most recent call last) in ()
----> 1 open('name.txt','r')FileNotFoundError: [Errno 2] No such file or directory: 'name.txt'

说明:以只读模式打开一个不存在的“name.txt”,这时就会报错。这类错误可以预料到,可以针对这个已经存在的问题进行异常处理,因此这类错误称为异常;而错误则是无法修正,不能进行处理的错误。

2. 异常处理

发生异常

print("---test---1---")
f = open('name.txt','r') # 以只读模式打开一个不存在的文件,这时会报错
print("---test---2---") # 由于出错,这句话就不会执行
---test---1------------------------------------------------------------------------------FileNotFoundError                         Traceback (most recent call last) in ()1 print("---test---1---")
----> 2 f = open('name.txt','r') # 以只读模式打开一个不存在的文件,这时会报错3 print("---test---2---") # 由于出错,这句话就不会执行FileNotFoundError: [Errno 2] No such file or directory: 'name.txt'

捕获异常(异常类型欲要捕获,需要一致,即捕获的错误与本身的错误要一致)

try:print("---test---1---")f = open('name.txt','r') # 以只读模式打开一个不存在的文件,这时会报错print("---test---2---") # 由于出错,这句话就不会执行
# FileNotFoundError也是IOError,输入输出异常
except FileNotFoundError: # 捕获到上面出的错误,然后让程序继续运行,但不会报错pass
---test---1---

多个异常捕获

print(num)
---------------------------------------------------------------------------NameError                                 Traceback (most recent call last) in ()
----> 1 print(num)NameError: name 'num' is not defined
# 未知出的什么类型的错误
try:print("---test---1---")f = open('name.txt','r') print("---test---2---") print(num)
#以元组的方式将这些错误放在一起即可
except (FileNotFoundError,NameError): print("出现错误")
---test---1---
出现错误
# 获取错误描述
try:print("---test---1---")f = open('name.txt','r') print("---test---2---") print(num)
#以元组的方式将这些错误放在一起即可
except (FileNotFoundError,NameError) as error_res: print("出现错误")print(error_res) # 一次只报一个错误,先报前面的错误
---test---1---
出现错误
[Errno 2] No such file or directory: 'name.txt'
# 获取所有的异常和描述
try:print("---test---1---")f = open('name.txt','r') print("---test---2---") print(num)
#以元组的方式将这些错误放在一起即可
except Exception as error_res: # Exception可以承接所有的异常print("出现错误")print(error_res) # 一次只报一个错误,先报前面的错误
---test---1---
出现错误
[Errno 2] No such file or directory: 'name.txt'

try…finally与嵌套

# 常规用法
try:f = open("name.txt","r")
except Exception as res:print(res)
finally: # 意思是无论如何一定要执行print("文件关闭")
# f未定义,因为f为局部变量,因此会报错,
# 因此可以将finally写在里面
[Errno 2] No such file or directory: 'name.txt'
文件关闭
try:f = open("name.txt","r")
except Exception as res:print(res)
finally: # 意思是无论如何一定要执行f.close()print("文件关闭")
# f未定义,因为f为局部变量,因此会报错,
# 因此可以将finally写在里面
[Errno 2] No such file or directory: 'name.txt'---------------------------------------------------------------------------NameError                                 Traceback (most recent call last) in ()4     print(res)5 finally:
----> 6     f.close()7     print("文件关闭")NameError: name 'f' is not defined
# 嵌套用法
import time
try:f = open("name.txt","r")try:while True:content = f.readline()#读取文件中的一行if len(content) == 0:break # 如果为空,则退出time.sleep(2)# 暂停2sprint(content)finally: # 意思是无论如何一定要执行f.close()print("文件关闭")except Exception as res:print(res)
[Errno 2] No such file or directory: 'name.txt'
try:print("---test---1---")f = open('name.txt','r') # 以只读模式打开一个不存在的文件,这时会报错print("---test---2---") # 由于出错,这句话就不会执行
# FileNotFoundError也是IOError,输入输出异常
except FileNotFoundError,s: # 捕获到上面出的错误,然后让程序继续运行,但不会报错pass
  File "", line 6except FileNotFoundError,s: # 捕获到上面出的错误,然后让程序继续运行,但不会报错^
SyntaxError: invalid syntax

抛出异常

x = 10
if x > 5:raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
---------------------------------------------------------------------------Exception                                 Traceback (most recent call last) in ()1 x = 102 if x > 5:
----> 3     raise Exception('x 不能大于 5。x 的值为: {}'.format(x))Exception: x 不能大于 5。x 的值为: 10
# 如果只想知道这是否抛出了一个异常,并不想去处理它,
# 那么一个简单的 raise 语句就可以再次把它抛出。
try:raise NameError('HiThere')
except NameError:print('An exception flew by!')raise
An exception flew by!---------------------------------------------------------------------------NameError                                 Traceback (most recent call last) in ()1 try:
----> 2     raise NameError('HiThere')3 except NameError:4     print('An exception flew by!')5     raiseNameError: HiThere


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部