异常基础

在Python中,异常会依据错误自己主动地被触发。也能由代码触发和截获。异常由五个语句处理:



1.【try/except】:捕捉由Python或你引起的异常并恢复。

2.【try/finally】:不管异常是否发生,运行清理行为。

3.【raise】:手动在代码中触发异常。

4.【assert】:有条件地在程序代码中触发异常。

5.【with/as】:在Python2.6和兴许版本号中实现环境管理器



异常通常能够用于各种用途。

以下是它最常见的几种角色:



1.错误处理:每当在执行时检測到程序错误时,Python就会引发异常,能够在代码中捕捉和对应错误。或者忽略已发生的异常。

2.事件通知:异常也可用于发出有效状态的信号,而不需在程序间传递结果标志位,或者刻意对其进行測试。

3.特殊情况处理:有时,发生了非常罕见的情况。非常难调整代码去处理,一般会在异常处理器中处理这些罕见的情况,从而省去应对特殊情况的代码。

4.终止行为:try/finally语句可确保一定会进行须要的结束运算。不管程序中是否有异常。

5.很规控制流程

-----------------------------------------------------------------------------------------------------------------------------------

默认异常处理器

如果编写以下的函数:

>>> def fetcher(obj,index):
return obj[index]

正常运算中。它将返回合法的索引值的结果:

>>> x = 'spam'
>>> fetcher(x,3)
'm'

然而,若索引指向字符串末尾以后的位置,就会引发异常。Python会替序列检測到超出边界的索引运算,并通过【抛出】内置的IndexError异常进行报告。

>>> fetcher(x,4)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
fetcher(x,4)
File "<pyshell#2>", line 2, in fetcher
return obj[index]
IndexError: string index out of range

由于我们的代码没有能够捕捉这个异常。所以它将会一直向上返回到程序顶层,并启用【默认的异常处理器】:就是打印标准出错消息。

-----------------------------------------------------------------------------------------------------------------------------------

捕获异常

只是,在有些情况下。这并非我们想要的。比如,server程序一般须要在内部发生错误时依旧保持工作。

假设不想要默认的异常行为。就须要把调用包装在try语句内。自行捕捉异常。

>>>
try:
fetcher(x,4)
except IndexError:
print('got exception') got exception

如今,当try代码块运行时触发异常。Python会自己主动跳至处理器(指出引发的异常名称的except分句以下的代码块)。

在实际的程序中。try语句不仅会捕获异常,也会从中恢复运行:

>>> def catcher():
try:
fetcher(x,4)
except IndexError:
print('got exception')
print('continuing') >>> catcher()
got exception
continuing

这次,在异常捕捉和处理后。程序在捕捉了整个try语句后继续执行:这就是得到“continuing”消息的原因。我们没有看见标准出错消息,而程序也将正常执行下去。

============================================================================

用户定义的异常

用户定义的异常可以通过类编写,它继承自一个内置的异常类:通常这个类的名称叫做Exception。

>>> class Bad(Exception):
pass >>> def doomed():
raise Bad() >>>
try:
doomed()
except Bad:
print('Got Bad') Got Bad

============================================================================

终止行为

最后。try语句能够包括finally代码块,这能够定义一定会在最后运行时的收尾行为,不管try代码块中是否发生了异常。

>>>
try:
fetcher(x,3)
finally:
print('after fetch') 'm'
after fetch

在这里,假设try代码块完毕后没有异常,finally代码块就会运行,而程序会在整个try后继续下去。

在之后将会看到,在使用某些类型的对象的时候,Python2.6和Python3提供了try/finally的一种替代。

with/as执行一个对象的环境管理逻辑,来确保终止行为的发生:

>>> with open('test.txt','w') as file:
file.write('The night!')

Python——异常基础的更多相关文章

  1. Python异常基础

    一.常见异常及场景举例 1.AssertionError 断言失败,断言是调试中常用(表示自己并不常用┑( ̄Д  ̄)┍)手段 举例: def foo(s): n = int(s) assert n ! ...

  2. Python异常(基础) except

    为什么要异常处理机制:在程序调用层数较深时,向主调函数传递错误信息需要层层return 返回比较麻烦,用异常处理机制可以较简单的传送错误信息 什么是错误 错误是指由于逻辑或语法等导致一个程序已无法正常 ...

  3. Python 异常机制

    1.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! try: pass # 程序正常执行时做什么操作 ...

  4. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  5. Python学习基础笔记(全)

    换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...

  6. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  7. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  8. Python 从基础------进阶------算法 系列

    1.简介                                                                                               关 ...

  9. Python开发基础-Day23try异常处理、socket套接字基础1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

随机推荐

  1. 解决Unity的 The file &#39;MemoryStream&#39; is corrupted! Remove it and launch 崩溃问题

    孙广东   2015.7.30 问题:   在项目平时删除资源或者脚本资源时产生的prefab的脚本引用丢失,特别是在场景scene中丢了解决方式/// 1.又一次Clone项目/// 2.删除项目的 ...

  2. Hit 2255 Not Fibonacci

    今天下午刚起来眼睛就比較涨,,并且还有点恶心,唉.结果一直不在状态.并且这个题太坑了.. .. 点击此处即可传送 Hit 2255 Maybe ACMers of HIT are always fon ...

  3. Android Activity组件的启动过程

    0.总图 1.总图中的第一步,Laucher主线程向ActivityManagerService进程发出START_ACTIVITY_TRANSACTION 如图:第一步 ~/Android/fram ...

  4. wpf Shake

    <Setter Property="RenderTransformOrigin" Value="0.5 0.5" /> <Setter Pro ...

  5. 求区间连续不超过K段的最大和--线段树+大量代码

    题目描述: 这是一道数据结构题. 我们拥有一个长度为n的数组a[i]. 我们有m次操作.操作有两种类型: 0 i val:表示我们要把a[i]修改为val; 1 l r k:表示我们要求出区间[l,r ...

  6. Ubuntu 16.04 安装 Wireshark分析tcpdump的pcap包——sudo apt install wireshark-qt

    tcpdump 的抓包保存到文件的命令参数是-w xxx.cap   抓eth1的包  tcpdump -i eth1 -w /tmp/xxx.cap    抓 192.168.1.123的包  tc ...

  7. 敏捷开发 —— TDD(测试驱动开发)

    测试驱动开发 TDD(Test-Driven Development)是敏捷开发的一项核心实践,同时也是一种设计技术和方法. 既然是测试驱动,便是测试,测试用例先行: 首先编写好测试用例,期待值,实际 ...

  8. [IOI 1999] 花店橱窗布置

    [题目链接] https://www.luogu.org/problemnew/show/P1854v [算法] f[i][j]表示放了前i束花,第i束花放在第j个花瓶中,所能获得的最大美学值 由于要 ...

  9. java格式化时间到毫秒

    转自:https://blog.csdn.net/iplayvs2008/article/details/41910835 java格式化时间到毫秒: SimpleDateFormat formatt ...

  10. System.setProperty 与 System.getProperty

    转自:https://www.cnblogs.com/woftlcj/p/8404451.html System可以有对标准输入,标准输出,错误输出流:对外部定义的属性和环境变量的访问:加载文件和库的 ...