Python异常处理学习笔记

1. 异常是什么?

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

open('name.txt','r')
---------------------------------------------------------------------------

FileNotFoundError                         Traceback (most recent call last)

<ipython-input-3-b60a434136cf> in <module>()
----> 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)

<ipython-input-4-708ad2c1cc05> in <module>()
      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)

<ipython-input-6-55a60ae9504f> in <module>()
----> 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)

<ipython-input-11-848ac7990860> in <module>()
      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)# 暂停2s
            print(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 "<ipython-input-15-df15cce868e3>", line 6
    except FileNotFoundError,s: # 捕获到上面出的错误,然后让程序继续运行,但不会报错
                            ^
SyntaxError: invalid syntax

抛出异常

x = 10
if x > 5:
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
---------------------------------------------------------------------------

Exception                                 Traceback (most recent call last)

<ipython-input-17-e00bf68fb93c> in <module>()
      1 x = 10
      2 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)

<ipython-input-20-bf6ef4926f8c> in <module>()
      1 try:
----> 2     raise NameError('HiThere')
      3 except NameError:
      4     print('An exception flew by!')
      5     raise


NameError: HiThere
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

而又何羡乎

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

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

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

打赏作者

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

抵扣说明:

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

余额充值