Python之异常处理
发布时间:2020-12-13 20:04:10 所属栏目:PHP教程 来源:网络整理
导读:1、甚么是异常? 异常即是1个事件,该事件会在程序履行进程中产生,影响了程序的正常履行。 1般情况下,在Python没法正常处理程序时就会产生1个异常。 异常是Python对象,表示1个毛
1、甚么是异常? 异常语法: try:
<语句> #运行别的代码 except <名字>: <语句> #如果在try部分引发了'name'异常 except <名字>,<数据>: <语句> #如果引发了'name'异常,取得附加的数据 else: <语句> #如果没有异常产生
try...except的使用方法
try...except用于处理问题语句,捕获可能出现的异常。try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常。
演示try...except语句捕获IOError异常
try:
file("hello.txt","r") #如果文件不存在,引发异常
print "读文件"
except IOError: #捕获IO异常
print "文件不存在"
except: #其它异常
print "程序异常"
python与Java的异常处理模式相似,异常处理语句也能够嵌套,演示以下:
try:
s = "hello"
try:
print s[0] + s[1]
print s[0] - s[1]
except TypeError:
print "字符串不支持减法运算"
except:
print "异常"
如果外层try子句中的代码引发异常,程序将直接跳转到外层try对应的except子句,而内部的try子句将不会被履行。
try...finally的使用方法
try...except后还可以添加1个finally子句。不管异常是不是产生,finally子句都会被履行。所有的finally子句通经常使用于关闭因异常而不能释放的系统资源。
try:
f = open("hello.txt","r")
try:
print f.read(5)
except:
print "读文件异常"
finally:
print "释放资源"
f.close()
except IOError:
print "文件不存在"
使用raise抛出异常
当程序出现毛病,python会自动引发异常,也能够通过raise显示地引发异常。1旦履行了raise语句,raise后面的语句将不能履行。
演示raise用法
try:
s = None
if s is None:
print "s 是空对象"
raise NameError #如果引发NameError异常,后面的代码将不能履行
print len(s)
except TypeError:
print "空对象没有长度"
自定义异常
python允许程序员自定义异常,用于描写python中没有触及的异常情况,自定义异常必须继承Exception类,自定义异常依照命名规范以"Error"结尾,显示地告知程序员这是异常。自定义异常使用raise语句引发,而且只能通过人工方式触发。
from __future__ import division
class DivisionException(Exception):
def __init__(self,x,y):
Exception.__init__ (self,y) #调用基类的__init__进行初始化
self.x = x
self.y = y
if __name__ == "__main__":
try:
x = 3
y = 2
if x % y > 0: #如果大于0, 则不能被初始化,抛出异常
print x/y
raise DivisionException(x,y)
except DivisionException,div: #div 表示DivisionException的实例对象
print "DivisionExcetion: x/y = %.2f" % (div.x/div.y)
assert语句的使用
assert语句用于检测某个条件表达式是不是为真。assert语句又称为断言语句,即assert认为检测的表达式永久为真,if语句中的条件判断都可使用assert语句检测。
附:python标准异常 BaseExceptiona:所有异常的基类 SystemExitb python:解释器要求退出 KeyboardInterruptc:用户中断履行(通常是输入^C) Exceptiond:常规毛病的基类 StopIteratione:迭代器没有更多的值 GeneratorExita:生成器(generator)产生异常来通知退出 SystemExith:Python 解释器要求退出 StandardErrorg:所有的内建标准异常的基类 ArithmeticErrord:所有数值计算毛病的基类 FloatingPointErrord:浮点计算毛病 OverflowError:数值运算超越最大限制 ZeroDivisionError:除(或取模)零 (所有数据类型) AssertionErrord:断言语句失败 AttributeError:对象没有这个属性 EOFError:没有内建输入,到达EOF 标记 EnvironmentErrord:操作系统毛病的基类 IOError:输入/输出操作失败 OSErrord:操作系统毛病 WindowsErrorh Windows:系统调用失败 ImportError:导入模块/对象失败 KeyboardInterruptf:用户中断履行(通常是输入^C) LookupErrord:无效数据查询的基类 IndexError:序列中没有无此索引(index) KeyError:映照中没有这个键 MemoryError:内存溢出毛病(对Python 解释器不是致命的) NameError:未声明/初始化对象 (没有属性) UnboundLocalErrorh:访问未初始化的本地变量 ReferenceErrore:弱援用(Weak reference)试图访问已垃圾回收了的对象 RuntimeError:1般的运行时毛病 NotImplementedErrord:还没有实现的方法 SyntaxError:Python 语法毛病 IndentationErrorg:缩进毛病 TabErrorg:Tab 和空格混用 SystemError 1般的解释器系统毛病 TypeError:对类型无效的操作 ValueError:传入无效的参数 UnicodeErrorh:Unicode 相干的毛病 UnicodeDecodeErrori:Unicode 解码时的毛病 UnicodeEncodeErrori:Unicode 编码时毛病 UnicodeTranslateErrorf:Unicode 转换时毛病 Warningj:正告的基类 DeprecationWarningj:关于被弃用的特点的正告 FutureWarningi:关于构造将来语义会有改变的正告 OverflowWarningk:旧的关于自动提升为长整型(long)的正告 PendingDeprecationWarningi:关于特性将会被废弃的正告 RuntimeWarningj:可疑的运行时行动(runtime behavior)的正告 SyntaxWarningj:可疑的语法的正告 UserWarningj:用户代码生成的正告 Python的Exception层次结构Exception
|
+-- SystemExit
+-- StopIteration
+-- StandardError
| |
| +-- KeyboardInterrupt
| +-- ImportError
| +-- EnvironmentError
| | |
| | +-- IOError
| | +-- OSError
| | |
| | +-- WindowsError
| | +-- VMSError
| |
| +-- EOFError
| +-- RuntimeError
| | |
| | +-- NotImplementedError
| |
| +-- NameError
| | |
| | +-- UnboundLocalError
| |
| +-- AttributeError
| +-- SyntaxError
| | |
| | +-- IndentationError
| | |
| | +-- TabError
| |
| +-- TypeError
| +-- AssertionError
| +-- LookupError
| | |
| | +-- IndexError
| | +-- KeyError
| |
| +-- ArithmeticError
| | |
| | +-- OverflowError
| | +-- ZeroDivisionError
| | +-- FloatingPointError
| |
| +-- ValueError
| | |
| | +-- UnicodeError
| | |
| | +-- UnicodeEncodeError
| | +-- UnicodeDecodeError
| | +-- UnicodeTranslateError
| |
| +-- ReferenceError
| +-- SystemError
| +-- MemoryError
|
+---Warning
|
+-- UserWarning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- SyntaxWarning
+-- OverflowWarning
+-- RuntimeWarning
+-- FutureWarning 参考文献: http://blog.chinaunix.net/uid⑵1505614-id⑶618285.html http://www.phperz.com/article/14/1009/14507.html http://blog.chinaunix.net/uid⑵2920230-id⑶074716.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |