赞
踩
Python提供了向java一样的非常丰富的异常类。
1、NameError:尝试访问一个未申明的变量
>>> v
NameError: name 'v' is not defined
2、ZeroDivisionError:除数为0
>>> v = 1/0
ZeroDivisionError: int division or modulo by zero
3、SyntaxError:语法错误
>>> int int
SyntaxError: invalid syntax (<pyshell#14>, line 1)
4、IndexError:索引超出范围
>>> List = [2]
>>> List[3]
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
List[3]
IndexError: list index out of range
5、KeyError:字典关键字不存在
>>> Dic = {'1':'yes', '2':'no'}
>>> Dic['3']
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
Dic['3']
KeyError: '3'
6、IOError:输入输出错误
>>> f = open('abc')
IOError: [Errno 2] No such file or directory: 'abc'
7、AttributeError:访问未知对象属性
>>> class Worker:
def Work():
print("I am working")
>>> w = Worker()
>>> w.a
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
w.a
AttributeError: 'Worker' object has no attribute 'a'
8、ValueError:数值错误
>>> int('d')
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
int('d')
ValueError: invalid literal for int() with base 10: 'd'
9、TypeError:类型错误
>>> iStr = '22'
>>> iVal = 22
>>> obj = iStr + iVal;
Traceback (most recent call last):
File "<pyshell#68>", line 1, in <module>
obj = iStr + iVal;
TypeError: Can't convert 'int' object to str implicitly
10、AssertionError:断言错误
>>> assert 1 != 1
Traceback (most recent call last):
File "<pyshell#70>", line 1, in <module>
assert 1 != 1
AssertionError
以上转自http://blog.csdn.net/fcoolx/article/details/4202872
下面增加一些本人工作过程中遇到过的异常:
11、MemoryError:内存耗尽异常
12、NotImplementedError:方法没实现引起的异常
示例:
1 class Base(object): 2 def __init__(self): 3 pass 4 5 def action(self): 6 raise NotImplementedError
定义一个类,一个接口方法action,如果直接调用action则抛NotImplementedError异常,这样做的目的通常是用来模拟接口
13、LookupError:键、值不存在引发的异常
LookupError异常是IndexError、KeyError的基类
如果你不确定数据类型是字典还是列表时,可以用LookupError捕获此异常
14、StandardError 标准异常。
除StopIteration, GeneratorExit, KeyboardInterrupt 和SystemExit外,其他异常都是StandarError的子类。
抛出异常的方法
例如输出一个数倒数的函数
- def test(a):
- try:
- b = 1/a
- print(b)
- except ZeroDivisionError as e: //除数为零的异常
- print(e)
- except Exception as e: //其他异常,例如传入a是一个字符串
- print("unknown error")
- finally: //最终执行的的语句
- print("exec the function")
except Exception as e:
在python2.x中,
except Exception, e:
也是合法的,但在python3.x中,会报错,因此最好写成第一种形式,2,3均支持
sys.exc_info()
会返回一个3值元表,其中包含调用该命令时捕获的异常。
这个元表的内容为 (type, value, traceback) ,其中:
sys.last_traceback
包含的内容与 sys.exc_info()
相同,但它主要用于调试,并不总是被定义。
import sys try: raise except: t,v,tb = sys.exc_info() print(t,v)
trackback 模块用来精确模仿 python3 解析器的 stack trace 行为。在程序中应该尽量使用这个模块。
traceback.print_exc()
可以直接打印当前的异常。
import traceback try: raise except: traceback.print_exc()
traceback.print_tb()
用来打印上面提到的 trackback 对象。
import sys,traceback try: raise except: t,v,tb = sys.exc_info() traceback.print_tb(tb)
traceback.print_exception()
可以直接打印 sys.exc_info()
提供的元表。
import sys,traceback try: raise except: traceback.print_exception(*sys.exc_info())
但是,如果你还想把这些异常保存到一个日志文件中,来分析这些异常,那么请看下面的方法:
把 traceback.print_exc() 打印在屏幕上的信息保存到一个文本文件中
1
2
3
4
5
6
7
8
9
|
import
traceback
try
:
a
=
b
b
=
c
except
:
f
=
open
(
"c:log.txt"
,
'a'
)
traceback.print_exc(
file
=
f)
f.flush()
f.close()
|
其实,下面两句是等价的:
traceback.print_exc()
traceback.print_exception(*sys.exc_info())
traceback 提供的参数可以将 print 的内容写入到文件中,详见这里:29.9. traceback — Print or retrieve a stack traceback
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。