python 中的异常处理与种类
异常处理是Python工程中补课避免的,进行异常处理,可以帮我们调试代码,使代码找起问题更加简单,更加容易哦。
一般都是利用Try,比较简单,代码也不复杂。
try:
print 'try...'
r = 10 / 0
print 'result:', r
except ZeroDivisionError, e:
print 'except:', e
finally:
print 'finally...'
print 'END'
使用try...except
捕获错误有一个巨大的好处,就是可以跨越多层调用,比如函数main()
调用foo()
,foo()
调用bar()
,结果bar()
出错了,这时,只要main()
捕获到了,就可以处理:
def foo(s):
return 10 / int(s) def bar(s):
return foo(s) * 2 def main():
try:
bar('')
except StandardError, e:
print 'Error!'
finally:
print 'finally...'
也就是说,不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了。这样一来,就大大减少了写try...except...finally
的麻烦。
异常应该是类对象。模块中定义了例外 exceptions
。此模块不需要显式导入:异常在内置命名空间以及 exceptions
模块中提供。
对于类异常,在try
同一个声明中except
说提到的一类特殊条款,该条款还处理来自类(从中但也不例外类派生的任何异常类它派生)。通过子类化不相关的两个异常类永远不是等效的,即使它们具有相同的名称。
下面列出的内置异常可以由解释器或内置函数生成。除了提及的地方,他们有一个“关联值”,指示错误的详细原因。这可能是包含几个信息项的字符串或元组(例如,错误代码和解释代码的字符串)。关联值是语句的第二个参数 raise
。如果异常类是从标准根类派生的BaseException
,则相关联的值将作为异常实例的args
属性存在。
用户代码可以引发内置异常。这可以用于测试异常处理程序或报告错误条件“就像”解释器引发相同异常的情况; 但请注意,没有任何可以防止用户代码提出不正确的错误。
内置的异常类可以被子类化以定义新的异常; 鼓励程序员从Exception
类或其子类之一导出新的异常,而不是从BaseException
。有关定义异常的更多信息,请参见Python教程中 用户定义的异常。
以下异常仅用作其他异常的基类。
- 异常
BaseException
-
所有内置异常的基类。它不是直接由用户定义的类继承(为此使用
Exception
)。如果str()
或者unicode()
是在这个类的一个实例上被调用,返回实例的参数表示,或者当没有参数时,返回空字符串。args
-
给异常构造函数的元组元组。一些内置异常(如
IOError
)期望一定数量的参数,并为此元组的元素分配特殊含义,而其他异常通常仅使用单个字符串给出错误消息。
- 异常
Exception
-
所有内置的,非系统退出的异常都是从这个类派生出来的。所有用户定义的异常也应该从此类派生。
更改版本2.5:更改为继承
BaseException
。
- 异常
StandardError
-
该基类除了所有内置例外
StopIteration
,GeneratorExit
,KeyboardInterrupt
和SystemExit
。StandardError
本身源于Exception
。
- 异常
ArithmeticError
-
对于那些内置异常的基类时引发的各种算术错误:
OverflowError
,ZeroDivisionError
,FloatingPointError
。
- 异常
BufferError
-
当无法执行缓冲区相关操作时引发。
- 异常
LookupError
-
当映射或序列上使用的键或索引无效时引发异常的基类:
IndexError
,KeyError
。这可以直接提出来codecs.lookup()
。
- 异常
EnvironmentError
-
对于可以在Python的系统外发生异常的基类:
IOError
,OSError
。当使用2元组创建此类型的异常时,第一个项目在实例的errno
属性上可用(假设为错误号),第二个项目在属性上strerror
可用(通常是关联的错误消息)。元组本身也可以在属性上使用args
。新版本1.5.2。
当使用
EnvironmentError
3元组实例化异常时,前两个项目如上所述,而第三个项目在该filename
属性上 可用。但是,为了向后兼容,该args
属性仅包含前两个构造函数参数的2元组。该
filename
属性是None
使用3个参数以外的其他异常创建的。的errno
和strerror
属性也None
当实例与其他大于2个或3个参数创建。在最后一种情况下,args
将逐个构造函数的参数包含为元组。
以下异常是实际引发的异常。
- 异常
AssertionError
-
当
assert
声明失败时提起。
- 异常
EOFError
-
当其中一个内置函数(
input()
或raw_input()
)在没有读取任何数据的情况下触发文件结束条件(EOF)时引发。(注:在file.read()
和file.readline()
方法时,他们打EOF返回一个空字符串。)
- 异常
FloatingPointError
-
当浮点操作失败时触发。这个异常总是定义的,但是只有当Python配置了该
--with-fpectl
选项,或者WANT_SIGFPE_HANDLER
在pyconfig.h
文件中定义了符号时,才能引发此异常 。
- 异常
GeneratorExit
-
当发电机的
close()
方法被调用时提起。它直接继承BaseException
而不是,StandardError
因为它在技术上不是错误。在版本2.6中更改:更改为继承
BaseException
。
- 异常
IOError
-
当I / O操作(如
print
语句,内置open()
函数或文件对象的方法)因I / O相关原因(例如“未找到文件”或“磁盘已满”)而失败时引发。此类衍生
EnvironmentError
。有关异常实例属性的更多信息,请参阅上面的讨论。在版本2.6中更改:更改
socket.error
为使用此作为基类。
- 异常
ImportError
-
当
import
语句找不到模块定义或找不到要导入的名称时引发。from ... import
- 异常
IndexError
-
当序列下标超出范围时提起。(Slice索引被静默地截断以落在允许的范围内;如果索引不是一个纯整数,
TypeError
则会被提升。)
- 异常
KeyError
-
当在现有密钥集中找不到映射(字典)键时引发。
- 异常
KeyboardInterrupt
-
当用户点击中断键(正常
Control-C
或Delete
)时触发。在执行期间,定期检查中断。当内置函数input()
或raw_input()
正在等待输入时,键入的中断也会引发此异常。异常继承BaseException
而不被意外地捕获Exception
并因此阻止解释器退出的代码。更改版本2.5:更改为继承
BaseException
。
- 异常
MemoryError
-
当操作内存不足时提起,但情况可能仍然会被抢救(通过删除某些对象)。相关联的值是一个字符串,指示什么样的(内部)操作用完了内存。请注意,由于底层内存管理架构(C的
malloc()
功能),解释器可能并不总是能够从这种情况中完全恢复; 但是它引发了一个异常,以便可以打印堆栈跟踪,以防万一出现程序的原因。
- 异常
NameError
-
当找不到本地或全球名称时提起。这仅适用于不合格的名称。相关联的值是一个错误消息,其中包含无法找到的名称。
- 异常
NotImplementedError
-
这个异常来源于
RuntimeError
。在用户定义的基类中,当需要派生类来覆盖该方法时,抽象方法应引发此异常。
- 异常
OSError
-
这个异常来源于
EnvironmentError
。当函数返回与系统相关的错误(不是非法参数类型或其他偶然错误)时引发。的errno
属性是从一个数字错误代码errno
,并且strerror
属性是相应的字符串,如将被C函数被打印perror()
。请参阅模块errno
,其中包含由底层操作系统定义的错误代码的名称。对于涉及文件系统路径(例如
chdir()
或unlink()
)的异常,异常实例将包含第三个属性filename
,即传递给该函数的文件名。新版本1.5.2。
- 异常
OverflowError
-
当算术运算的结果太大而不能被表示时提升。对于长整型(这不会
MemoryError
放弃)而且对于大多数具有纯整数的操作,这不会返回长整数。由于在C中缺少浮点异常处理的标准化,大多数浮点运算也没有被检查。
- 异常
ReferenceError
-
当由
weakref.proxy()
函数创建的弱引用代理 在垃圾回收之后用于访问指称对象的属性时,会引发此异常。有关弱引用的更多信息,请参阅该weakref
模块。2.2版中的新功能:以前被称为
weakref.ReferenceError
异常。
- 异常
RuntimeError
-
当检测到不属于任何其他类别的错误时引发。相关联的值是一个字符串,表示正确的错误。
- 异常
StopIteration
-
由迭代器的
next()
方法引发,表明没有其他值。这是从而Exception
不是StandardError
,因为这不被认为是其正常应用程序中的错误。版本2.2中新增。
- 异常
SyntaxError
-
解析器遇到语法错误时引发。这可能发生在
import
语句,exec
语句,调用内置函数eval()
或input()
读取初始脚本或标准输入(也可交互式)时。这个类的实例有属性
filename
,lineno
,offset
并且text
为的细节更容易获得。str()
的异常实例仅返回消息。
- 异常
IndentationError
-
与错误缩进相关的语法错误的基类。这是一个子类
SyntaxError
。
- 异常
TabError
-
缩进时引发的标签和空格不一致。这是一个子类
IndentationError
。
- 异常
SystemError
-
当翻译发现内部错误时,提出了这种情况,但情况并不那么严重,导致它放弃了所有的希望。相关联的值是一个字符串,表示出现错误(低级别)。
您应该向Python解释器的作者或维护者报告。确保报告Python解释器的版本(
sys.version
它也是在交互式Python会话开始时打印的),确切的错误消息(异常关联值)以及触发错误的程序源可能的可能。
- 异常
SystemExit
-
该异常由
sys.exit()
函数引发。当它不被处理时,Python解释器退出; 不打印堆栈追溯。如果关联值为纯整数,则指定系统退出状态(传递给C的exit()
函数); 如果是None
,退出状态为零; 如果有其他类型(如字符串),则打印对象的值,退出状态为一。实例具有
code
设置为建议的退出状态或错误消息(默认为None
)的属性。此外,这种异常直接来自于BaseException
而不是StandardError
,因为它在技术上不是错误。调用
sys.exit()
被转换为异常,以便清理处理程序(finally
语句的try
子句)可以被执行,并且调试器可以执行脚本而不会失去控制的风险。os._exit()
如果绝对有必要立即退出(例如,在调用后的子进程os.fork()
)中,则可以使用该函数。唯一的例外来自继承
BaseException
,而不是StandardError
或Exception
使得它不会意外地被映入代码捕获Exception
。这允许异常正常传播并导致解释器退出。更改版本2.5:更改为继承
BaseException
。
- 异常
TypeError
-
当操作或功能应用于不适当类型的对象时提起。关联值是一个字符串,提供有关类型不匹配的详细信息。
- 异常
UnboundLocalError
-
当引用函数或方法中的局部变量时引用,但没有值绑定到该变量。这是一个子类
NameError
。
- 异常
UnicodeError
-
当与Unicode相关的编码或解码错误发生时引发。它是一个子类
ValueError
。UnicodeError
具有描述编码或解码错误的属性。例如,err.object[err.start:err.end]
给出编解码器失败的特定无效输入。encoding
-
引起错误的编码的名称。
reason
-
描述特定编解码器错误的字符串。
object
-
编解码器正在尝试编码或解码的对象。
start
-
第一个无效数据索引
object
。
end
-
上次无效数据后的索引
object
。
- 异常
UnicodeEncodeError
-
在编码期间发生Unicode相关错误时引发。它是一个子类
UnicodeError
。
- 异常
UnicodeDecodeError
-
在解码过程中发生Unicode相关错误时引发。它是一个子类
UnicodeError
。
- 异常
UnicodeTranslateError
-
在翻译期间发生Unicode相关错误时引发。它是一个子类
UnicodeError
。
- 异常
ValueError
-
当内置操作或函数接收到具有正确类型但不正确值的参数时引发,并且情况未被更精确的异常描述,例如
IndexError
。
- 异常
VMSError
-
仅适用于VMS。发生VMS特定错误时引发。
- 异常
WindowsError
-
当出现特定于Windows的错误或错误号不对应于某个
errno
值时引发。该winerror
和strerror
值是从的返回值创建GetLastError()
并FormatMessage()
从Windows平台的API函数。该errno
值将值映射winerror
到相应的errno.h
值。这是一个子类OSError
。版本2.5更改:以前的版本将
GetLastError()
代码放入errno
。
- 异常
ZeroDivisionError
-
当分割或模运算的第二个参数为零时提升。关联值是指示操作数的类型和操作的字符串。
以下例外被用作警告类别; warnings
有关详细信息,请参阅该模块。
- 异常
Warning
-
警告类别的基类。
- 异常
UserWarning
-
由用户代码生成的警告的基类。
- 异常
DeprecationWarning
-
关于已弃用功能的警告的基类。
- 异常
PendingDeprecationWarning
-
关于将来不推荐使用的功能的警告的基类。
- 异常
SyntaxWarning
-
关于可疑语法的警告的基类。
- 异常
RuntimeWarning
-
关于可疑运行时行为的警告的基类。
- 异常
FutureWarning
-
关于将来会在语义上改变的结构的警告的基类。
- 异常
ImportWarning
-
关于模块进口中可能出现的错误的警告的基础类。
- 异常
UnicodeWarning
-
与Unicode有关的警告的基类。
异常层次
内置异常的类层次结构为:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StandardError
| +-- BufferError
| +-- ArithmeticError
| | +-- FloatingPointError
| | +-- OverflowError
| | +-- ZeroDivisionError
| +-- AssertionError
| +-- AttributeError
| +-- EnvironmentError
| | +-- IOError
| | +-- OSError
| | +-- WindowsError (Windows)
| | +-- VMSError (VMS)
| +-- EOFError
| +-- ImportError
| +-- LookupError
| | +-- IndexError
| | +-- KeyError
| +-- MemoryError
| +-- NameError
| | +-- UnboundLocalError
| +-- ReferenceError
| +-- RuntimeError
| | +-- NotImplementedError
| +-- SyntaxError
| | +-- IndentationError
| | +-- TabError
| +-- SystemError
| +-- TypeError
| +-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
python 中的异常处理与种类的更多相关文章
- python中的异常处理机制
python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...
- python基础20 -------python中的异常处理
一.python程序中的会出现的错误. 1.语法错误:这种错误根本过不了python解释器的语法检测阶段,必须在程序执行之前进行改正. 2.逻辑错误:这种错误虽然过了语法检测阶段但是程序在执行的过程中 ...
- Python基础---python中的异常处理
Python中的异常处理 一.什么是异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) ...
- 第五章 python中的异常处理
每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异 ...
- python中的异常处理tryexcept
1.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! 2.异常种类 names = ['张三','李四 ...
- Python中的异常处理 -- (转)
python中的异常 异常是指程序中的例外,违例情况.异常机制是指程序出现错误后,程序的处理方法.当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理. Exception类是常用的异 ...
- python中的异常处理try/except/finally/raise
异常发生在程序执行的过程中,如果python无法正常处理程序就会发生异常,导致整个程序终止执行,python中使用try/except语句可以捕获异常. try/except 异常的种类有很多,在不确 ...
- python中的异常处理常用方法
异常处理 什么是异常? 异常就是与正常情况不同,程序在执行过程中出现错误,导致无法执行完毕.异常其实就是代码执行过程中出错. 常见的一些异常 AttributeError 试图访问一个对象没有的属性, ...
- python中的异常处理:厌而不舍
什么是异常? ------异常:不正常的情况 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常. 异常是Pytho ...
随机推荐
- MySQL_截止昨日南京市所有在职业务员业绩排名-20170116
#计算南京销售员总业绩排名 数据结果已打乱处理 #职工信息表包含在职和离职两种状态 因此不能以这表当做主表 不然离职人的数据也会出现 以毛利表为主表 销售员限制在昨天在职的销售范围内 且和后面left ...
- Redis底层探秘(六):对象多态及回收
本篇是我们redis系列的最后一篇,整个系列其实是我学习<redis设计与实现>的笔记,这本书感觉不错,推荐使用redis的小伙伴都可以看看. 整个系列的文字都比较干,很多数据结构和C语言 ...
- 杂项之python利用pycrypto实现RSA
杂项之python利用pycrypto实现RSA 本节内容 pycrypto模块简介 RSA的公私钥生成 RSA使用公钥加密数据 RSA使用私钥解密密文 破解博客园登陆 pycrypto模块简介 py ...
- Jmeter & TICK
背景: 本来只是想在将Jmeter的测试结果写入InfluxDB, 但发现从InfluxDB V1.3后开始, 已经不支持Web Admin interface, 才发现InfluxData 搞了 ...
- 蓝桥杯 算法训练 ALGO-146 4-2找公倍数
算法训练 4-2找公倍数 时间限制:1.0s 内存限制:256.0MB 查看参考代码 问题描述 这里写问题描述. 打印出1-1000所有11和17的公倍数. 样例输入 一个满足题 ...
- [转载]Linux C 字符串函数 sprintf()、snprintf() 详解
一.sprintf() 函数详解 在将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望. 由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前 ...
- Linux网络工具lsof和netstat
lsof全名为list opened files,即列举系统中已经被打开的文件,基本使用如下: (1) 查看/etc/passwd使用情况 lsof /etc/password (2) 查看监听的so ...
- CentOS7 线上环境的一些 配置
上周服务器被攻击导致上面收回了我们服务器的IP,所以这周重新安装部署了服务器,使用centos7系统.为了防止服务器再次被攻击,所以建议以下几点: 1. root密码要复杂一点,尽量字母数字特殊字符都 ...
- Android 4学习(7):用户界面 - 基础
参考<Professional Android 4 Development> Android UI基本元素 下面这些概念是Android UI设计的基础,深入学习和理解它们是Android ...
- javascript删除option选项的多种方法总结
转自:https://blog.csdn.net/xiaoxuanyunmeng/article/details/16886505 1. JavaScript 代码如下: var oSel=docum ...