异常参数:
一个异常可以带上参数,可作为输出的异常信息参数。通过except语句来捕获异
常的参数
Ø异常参数接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收
一个或者多个值。元组通常包含错误字符串,错误数字,错误位置。
触发异常
我们可以使用raise语句自己触发异常,一旦执行raise语句,程序就会被终止。
#coding=utf-8
def exceptionTest(num):
if num < 0:
raise Exception("Invalid num")
else:
print num
if num == 0:
raise ZeroDivisionError("integer division or modulo by zero")
#调用函数,触发异常 可以循环执行,动态输入一个值
try:
exceptionTest(-12)
except Exception,e:
print e
exceptionTest(12)
exceptionTest(0)
F:\python\异常>python触发异常.txt
Invalid num
12
0
Traceback (most recent call last):
File "触发异常.txt", line 16, in <module>
exceptionTest(0)
File "触发异常.txt", line 8, in exceptionTest
raise ZeroDivisionError("integer division or modulo by zero")
ZeroDivisionError: integer division or modulo by zero
自定义异常
通过创建一个新的异常类,程序可以创建它们自己特定的异常。自定义异常都需要继承异常基类(Exception类),当然也可以继承具体的异常类(比如RuntimeError),通过直接或间接的方式。
1可以造玩具的模板(类),它可以接受不同的参数来造出不同的玩具(构造函数)
2造玩具的模板传递具体的参数(比如:大、中,小),可以生成不同大小的玩具(实例化)
#coding=utf-8
class Networkerror(RuntimeError):
#重写默认的__init__()方法,
#抛出特定的异常信息
def __init__(self, value):
self.value = value
#触发自定义的异常
try:
raise Networkerror("Bad hostname")
except Networkerror, e:
print "My exception occurred, value:", e.value
F:\python\异常>python自定义异常.txt
My exception occurred, value: Bad hostname
#传进去输入的字符串的长度和默认长度大小,如果输入的长度小于默认长度的话就抛出异常,现在抛出的异常相当于是对类的实例化,传参数,便于在下边捕获异常时打印对应的值
class ShortInputException(Exception):
'''A user-defined exception class.'''
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
try:
s = raw_input('Enter something --> ')
if len(s) < 3:
#如果输入的内容长度小于3,触发异常
raise ShortInputException(len(s), 3)
except EOFError:
print '\nWhy did you do an EOF on me?'
except ShortInputException, x:
print 'ShortInputException: The input was of length %d, \
was expecting at least %d' % (x.length, x.atleast)
else:
print 'No exception was raised.'
F:\python\异常>python自定义异常.txt
Enter something --> ty
ShortInputException: The input was of length 2, \was expecting at least 3
F:\python\异常>python自定义异常.txt
Enter something --> jjj
No exception was raised.
F:\python\异常>python自定义异常.txt
Enter something --> ty
ShortInputException: The input was of length 2, was expecting at least 3
F:\python\异常>python自定义异常.txt
Enter something --> l
ShortInputException: The input was of length 1, was expecting at least 3
异常抛出机制
1、如果在运行时发生异常,解释器会查找相应的处理语句(称为handler)。
2、要是在当前函数里没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理。
3、如果在最外层(全局“main”)还是没有找到的话,解释器就会退出,同时打印出traceback以便让用户找到错误产生的原因。
注意:
虽然大多数错误会导致异常,但一个异常不一定代表错误,有时候它们只是一个警告,有时候它们可能是一个终止信号,比如退出循环等
#encoding=utf-8
try:
for i in range(10):
for j in range(10):
if i==3 and j==3:
raise
print i,j
except:
print "exit loop!"
F:\python\异常>python跳出多重循环.txt
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 0
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
2 9
3 0
3 1
3 2
exit loop!
异常名称描述
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用户代码生成的警告