【python学习】python的异常处理

中国史之【九世之乱】:
商王中丁后,“兄终弟及”与“父死子继”相结合的王位继承制度遭到破坏。王朝内部连续发生王位纷争,又屡次迁都,使得王朝中衰、诸侯离叛。这一动乱历经商朝九王,直至盘庚迁殷后才结束。
-来源:全历史APP

今天讲python的异常处理。有需要的也可以直接去我的github查看全部笔记:

https://github.com/JackKoLing/python_notes_with_ten_days
在这里插入图片描述
俗话说:“好记性不如烂笔头”,多写写多记记,总不会错。多一些不为什么的坚持,少一些功利主义的追求。对于环境的配置,可以参考以下两篇:

1、python异常

python运行时发生的错误称为异常,有两种类型:
(1)语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译
(2)逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成、计算或者输出结果需要的过程无法执行等

print(x)
>>>
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-fc17d851ef81> in <module>
----> 1 print(x)

NameError: name 'x' is not defined
print('abc'+3)
>>>
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-190af7a4b1e2> in <module>
----> 1 print('abc'+3)

TypeError: can only concatenate str (not "int") to str
1/0
>>>
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-3-9e1622b385b6> in <module>
----> 1 1/0

ZeroDivisionError: division by zero
l1 = [1, 2]
print(l1[2])
>>>
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-4-67a3d29b338b> in <module>
      1 l1 = [1, 2]
----> 2 print(l1[2])

IndexError: list index out of range
d1 = {'x':1, 'y':2}
print(d1['z'])
>>>
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-5-3fc111f911a6> in <module>
      1 d1 = {'x':1, 'y':2}
----> 2 print(d1['z'])

KeyError: 'z'
f = open('D:\\learnCode\\learnPython\\day10\\a.txt', 'r')
>>>
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-6-3585ee12030a> in <module>
----> 1 f = open('D:\\learnCode\\learnPython\\day10\\a.txt', 'r')

FileNotFoundError: [Errno 2] No such file or directory: 'D:\\learnCode\\learnPython\\day10\\a.txt'
def test(x):
print(x)

test('abc')
>>>
  File "<ipython-input-7-f8a98ef0b8c2>", line 2
    print(x)
        ^
IndentationError: expected an indented block

2 、python异常理解

  • python异常是一个对象,表示错误或意外情况。python检测到一个错误时,就触发一个异常
  • python可以通过异常传导机制,传递一个异常对象,发出一个异常情况出现的信号,程序员也可以在代码中手动触发异常
  • python异常可以理解为:程序出现了错误而在正常控制流以外采取的行为
  • 第一阶段:解释器触发异常,此时当前程序流将被打断
  • 第二阶段:异常处理,如忽略非致命性错误、跳过异常、减轻错误带来的影响等等

3、异常的功用

(1)错误处理:使用try语句处理异常并从异常中恢复
(2)事件通知:用于发出有效状态信号
(3)特殊情况处理:无法调整代码去处理的场景
(4)终止行为:try/finally语句可确保执行必需的结束处理机制
(5)非常规控制流程:异常是一种高级跳转(goto)机制

4、检测和处理异常

  • 异常通过try语句来检测,任何在try语句块里的代码都会被检测,以检查有无异常发生
  • try语句有两种形式:try-except和try-finally
  • try-except可以有多个except,也支持使用else子句处理没有探测异常的执行代码,注意仅能有一个else
  • try-finally仅检查异常并做一些必要的清理工作(如关闭文件)。注意仅能有一个finally,无论异常是否发生,finally子句都会执行
  • 也可以使用复合形式: try-except-else-finally
  • 注意,else是try块中没有发生异常时才会执行,而finally是一定执行
try:
    # 检测异常块
    f = open('D:\\learnCode\\learnPython\\day10\\abc.txt', 'w')
    f.write("this is a test file to test exception.")
except FileNotFoundError as res:
    # 若出现文件没找到异常,就执行这段
    print("cann't find file", res)
else:
    # 若没有异常,则执行这段
    print("write success")
    f.close()
>>>
write success
try:
    f = open('D:\\learnCode\\learnPython\\day10\\abc.txt', 'w')
    try:
        f.write("abc")
    finally:
        # 必须执行
        print("close file")
        f.close()
except FileNotFoundError as res:
    print("cann't open file", res)
>>>
close file

5、自定义异常

  • raise语句可以显式触发异常
def f1(seq1, seq2):
    if not seq1 or not seq2:
        raise ValueError("Seq must not be empty.")
    print([(x1, x2) for x1 in seq1 for x2 in seq2])

l1 = [1, 2, 3]
l2 = ['a', 'b', 'c']
f1(l1, l2) # 没有异常
l3 = []
f1(l1, l3) # 注意这种异常是自己写的提醒
>>>
[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-10-cca8ddf4e3e7> in <module>
      8 f1(l1, l2)
      9 l3 = []
---> 10 f1(l1, l3)

<ipython-input-10-cca8ddf4e3e7> in f1(seq1, seq2)
      1 def f1(seq1, seq2):
      2     if not seq1 or not seq2:
----> 3         raise ValueError("Seq must not be empty.")
      4     print([(x1, x2) for x1 in seq1 for x2 in seq2])
      5 

ValueError: Seq must not be empty.

【声明】:学习笔记基于互联网上各种学习资源的个人整理。

以上是本期内容,下期介绍python的常见异常类。

我叫小保,一名计算机视觉爱好者、学习者、追随者,欢迎关注我一起学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JackkoLing

感谢你的支持

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

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

打赏作者

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

抵扣说明:

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

余额充值