python的异常类型
㈠ python错误类型
Python程序开发中的错误通常可分为三类:语法错误、运行肆镇时错误和逻辑错误。
1.语法错误,语法错误是在Python程序开发中最常见的错误,如关键字输入错误、变量未赋值使用、函数未定义等。在一些Python集成开发环境(如PyCharm)中,输入程序代码时会自动检测语法错误,并且错误位置以红色波浪线标出。因此,此类错误比较容易被发现和改正。
2.运行时错误,运行时错误是指Python代码编译通过,在运行代码时发生的错误。这类错误往往是由指令代码执行了非法操作引起的,如数组下标越界、除数为0、试图打判雹洞开一个不存在的文件、连接数据库错误等。当程序中出现这种错误时,程序会自动中断,并给出有关的错误信息提示。
3.逻辑错误,程序运行结果和预期结果不一致,说明程序中存在逻辑错误,如运算符使用不正确,语句顺序不对,循环语句的起始值、终值或步长设置不对等。逻辑错误通常不会产生错误提示,只能根据运行结掘枯果知道程序中出现了错误。因此,这种错误较难被排除,需要编程人员仔细阅读代码,使用调试和排错技巧,在可疑代码处插入断点并逐句跟踪,检查相关变量的值等方法,分析错误位置和原因。
㈡ Python中程序异常都能被处理吗
“异常”是Python对象,表示一个错误。
如果不想出现异常后程序自动停止运行,编程的人,就要主动捕捉异常,并自己作出相应处理。
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
下面是try/except的示例,说明了怎样处理各种异常:
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
Python的各种标准异常是预先定义好的。基本上包括了常见的异常情况,主要有以下内容。
异常名称 描述
BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
LookupError 无效数据查询的基类
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python 语法错误
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告
Python系统处理异常就是提示一下,停止运行。不想停止,只有自己处理。
可以不带类型,所有异常执行同一组语句:
try:
正常的操作
except:
发生异常,执行这块代码
else:
如果没有异常执行这块代码
也可以多个异常共用一段代码:
ry:
正常的操作
except(Exception1[, Exception2[,...ExceptionN]]]):
发生以上多个异常中的一个,执行这块代码
else:
如果没有异常执行这块代码
还有一种格式,可以有finally部分:
try:
fh = open("testfile", "w")
try:
fh.write("这是一个测试文件,用于测试异常!!")
finally:
print "关闭文件"
fh.close()except IOError:
print "Error: 没有找到文件或读取文件失败"
当在try块中抛出一个异常,立即执行finally块代码。
finally块中的所有语句执行后,异常被再次触发,并执行except块代码。
参数的内容不同于异常。
除了标准异常,我们也可以自己定义异常,并进行处理,这时用到raise语句:
raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
相应的异常处理程序示例如下:
try:
正常语句,内含raise语句
except Exception,err:
触发自定义异常
else:
其余代码
㈢ python异常值处理
如果你用 Python 编程,那么你就无法避开异常,因为异常在这门语言里无处不在。打个比方,当你在脚本执行时按 ctrl+c 退出,解释器就会产生一个 KeyboardInterrupt 异常。而 KeyError、ValueError、TypeError 等更是日常编程里随处可见的老朋友。
异常处理工作由“捕获”和“抛出”两部分组成。“捕获”指的是使用 try ... except 包裹特定语句,妥当的完成错误流程处理。而恰当的使用 raise 主动“抛出”异常,更是优雅代码里必不可少的组成部分。
异常分类
BaseException所有异常的基类
Exception常见错误的基类
ArithmeticError所有数值计算错误的基类
Warning警告的基类
AssertError断言语句(assert)失败
AttributeError尝试访问未知的对象属性
DeprecattionWarning关于被弃用的特征的警告
EOFError用户输入文件末尾标志EOF(Ctrl+d)
FloattingPointError浮点计算错误
FutureWarning关于构造将来语义会有改变的警告
GeneratorExitgenerator.close()方法被调用的时候
ImportError导入模块失败的时候
IndexError索引超出序列的范围
KeyError字典中查找一个不存在的关键字
KeyboardInterrupt用户输入中断键(Ctrl+c)
MemoryError内存溢出(可通过删除对象释放内存)
NamerError尝试访问一个不存在的变量
NotImplementedError尚未实现的方法
OSError操作系统产生的异常(例如打开一个不存在的文件)
OverflowError数值运算超出最大限制
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特征会被遗弃的警告
ReferenceError弱引用(weakreference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError一般的运行时错误
RuntimeWarning可疑的运行行为(runtimebehavior)的警告
StopIteration迭代器没有更多的值
SyntaxErrorPython的语法错误
SyntaxWarning可疑的语法的警告
IndentationError缩进错误
TabErrorTab和空格混合使用
SystemErrorPython编译器系统错误
SystemExitPython编译器进程被关闭
TypeError不同类型间的无效操作
UnboundLocalError访问一个未初始化的本地变量(NameError的子类)
UnicodeErrorUnicode相关的错误(ValueError的子类)
UnicodeEncodeErrorUnicode编码时的错误(UnicodeError的子类)
UnicodeDecodeErrorUnicode解码时的错误(UnicodeError的子类)
UserWarning用户代码生成的警告
ValueError传入无效的参数
ZeroDivisionError除数为零
㈣ python 中出现异常attributeerror 是什么异常
Python异常类
Python是面向对象语言,所以程序抛出的异常也是类。常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用Python了)。
望采纳!
㈤ Python 异常处理总结
什么是异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。
异常处理: 本站Python教程会具体介绍。
断言(Assertions):本站Python教程会具体介绍。
异常处理
捕捉异常可以使用try/except语句。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。
语法:
以下为简单的try….except…else的语法:
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
· 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
· 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
· 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
实例
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:
以上程序输出结果:
实例
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:
以上程序输出结果:
使用except而不带任何异常类型
你可以不带任何异常类型使用except,如下实例:
以上方式try-except语句捕获所有发生的异常。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。
使用except而带多种异常类型
你也可以使用相同的except语句来处理多个异常信息,如下所示:
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
实例
如果打开的文件没有可写权限,输出如下所示:
同样的例子也可以写成如下方式:
当在try块中抛出一个异常,立即执行finally块代码。finally块中的所有语句执行后,异常被再次提出,并执行except块代码。参数的内容不同于异常。
异常的参数
一个异常可以带上参数,可作为输出的异常信息参数。你可以通过except语句来捕获异常的参数,如下所示:
变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。
元组通常包含错误字符串,错误数字,错误位置。
实例
以下为单个异常的实例:
以上程序执行结果如下:
触发异常
我们可以使用raise语句自己触发异常
raise语法格式如下:
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是”None”。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
实例
一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。
定义一个异常非常简单,如下所示:
注意:为了能够捕获异常,”except”语句必须有用相同的异常来抛出类对象或者字符串。
例如我们捕获以上异常,”except”语句如下所示:
用户自定义异常
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。
在你定义以上类后,你可以触发该异常,如下所示:
来源 | 脚本之家 原文链接:http://www.jb51.net/article/47996.htm
㈥ python如何自定义异常
8.5. 用户自定义异常
在程序中可以通过创建新的异常类型来命名自己的异常(Python 类的内容请参见 类 )。异常类通常应该直接或间接的从 Exception 类派生,例如:
>>> class MyError(Exception):
... def __init__(self, value):
... self.value = value
... def __str__(self):
... return repr(self.value)
...
>>> try:
... raise MyError(2*2)
... except MyError as e:
... print('My exception occurred, value:', e.value)
...
My exception occurred, value: 4
>>> raise MyError('oops!')
Traceback (most recent call last):
File "
", line 1, in ?
__main__.MyError: 'oops!'
在这个例子中,Exception 默认的 __init__() 被覆盖。新的方式简单的创建 value 属性。这就替换了原来创建 args 属性的方式。
异常类中可以定义任何其它类中可以定义的东西,但是通常为了保持简单,只在其中加入几个属性信息,以供异常处理句柄提取。如果一个新创建的模块中需要抛出几种不同的错误时,一个通常的作法是为该模块定义一个异常基类,然后针对不同的错误类型派生出对应的异常子类:
class Error(Exception):
"""Base class for exceptions in this mole."""
pass
class InputError(Error):
"""Exception raised for errors in the input.
Attributes:
expression -- input expression in which the error occurred
message -- explanation of the error
"""
def __init__(self, expression, message):
self.expression = expression
self.message = message
class TransitionError(Error):
"""Raised when an operation attempts a state transition that's not
allowed.
Attributes:
previous -- state at beginning of transition
next -- attempted new state
message -- explanation of why the specific transition is not allowed
"""
def __init__(self, previous, next, message):
self.previous = previous
self.next = next
self.message = message
与标准异常相似,大多数异常的命名都以 “Error” 结尾。
很多标准模块中都定义了自己的异常,用以报告在他们所定义的函数中可能发生的错误。