2023年11月29日发(作者:)
try_except__异常处理
pt、raise
⼀、pt
有时候我们写程序的时候,会出现⼀些错误或异常,导致程序终⽌。例如,做除法时,除数为0,会引起⼀个ZeroDivisionError
例⼦:
1a=10
2b=0
3c=a/b
4print "done"
运⾏结果:
Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/", line 3, in
c=a/b
ZeroDivisionError: integer division or modulo by zero
我们发现程序因为ZeroDivisionError⽽中断了,语句print "done" 没有运⾏。为了处理异常,我们使⽤pt,更改代码:
1a=10
2b=0
3try:
4 c=a/b
5 print c
6except ZeroDivisionError,e:
7 print e
8print "done"
运⾏结果:
integer division or modulo by zero
done
这样程序就不会因为异常⽽中断,从⽽print "done"语句正常执⾏。
我们把可能发⽣错误的语句放在try模块⾥,⽤except来处理异常。except可以处理⼀个专门的异常,也可以处理⼀组圆括号中的异常,如果except后没有指定异常,则默认
处理所有的异常。每⼀个try,都必须⾄少有⼀个except
处理⼀组异常可以这样写(其中e代表异常的实例):
1try:
2 pass
3except (IOError ,ZeroDivisionError),e:
4 print e
try ....lse 语句,当没有异常发⽣时,else中的语句将会被执⾏。
例⼦:
1a=10
2b=0
3try:
4 c = b/ a
5 print c
6except (IOError ,ZeroDivisionError),x:
7 print x
8else:
9 print "no error"
10print "done"
运⾏结果:
0
no error
done
⼆、raise 引发⼀个异常
例⼦:如果输⼊的数据不是整数,则引发⼀个ValueError
1inputValue=input("please input a int data :")
2if type(inputValue)!=type(1):
3 raise ValueError
4else:
5 print inputValue
假设输⼊1.2,运⾏结果为:
please input a int data :1.2
Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/", line 3, in
raise ValueError
ValueError
如果输⼊1,运⾏结果为:
please input a int data :1
1
三、try ...finally
⽆论异常是否发⽣,在程序结束前,finally中的语句都会被执⾏。
1a=10
2b=0
3try:
4 print a/b
5finally:
6 print "always excute"
运⾏结果:
Traceback (most recent call last):
always excute
File "C:/Users/lirong/PycharmProjects/untitled/", line 4, in
print a/b
ZeroDivisionError: integer division or modulo by zero
虽然有异常发⽣,但在程序终⽌前,finally中的语句也能正常执⾏。。
finally语句也可以和except语句⼀起使⽤。
1a=10
2b=0
3try:
4 print a/b
5except:
6 print "error"
7finally:
8 print "always excute"
运⾏结果:
error
always excute
四、⾃定义⼀个异常类
⾃定义⼀个MyException类,继承Exception。
1class MyException(Exception):
2 def __init__(self,message):
3 Exception.__init__(self)
4 self.message=message
如果输⼊的数字⼩于10,就引发⼀个MyException异常:
1a=input("please input a num:")
2if a<10:
3 try:
4 raise MyException("my excepition is raised ")
5 except MyException,e:
6 print e
运⾏结果:
please input a num:1
my excepition is raised
五、所有的标准异常类:
异常名称描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt⽤户中断执⾏(通常是输⼊^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit⽣成器(generator)发⽣异常来通知退出
SystemExitPython 解释器请求退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最⼤限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断⾔语句失败
AttributeError对象没有这个属性
EOFError没有内建输⼊,到达EOF 标记
EnvironmentError操作系统错误的基类
IOError输⼊/输出操作失败
OSError操作系统错误
WindowsError系统调⽤失败
ImportError导⼊模块/对象失败
KeyboardInterrupt⽤户中断执⾏(通常是输⼊^C)
LookupError⽆效数据查询的基类
IndexError序列中没有没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引⽤(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError⼀般的运⾏时错误
NotImplementedError尚未实现的⽅法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混⽤
SystemError⼀般的解释器系统错误
TypeError对类型⽆效的操作
ValueError传⼊⽆效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运⾏时⾏为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning⽤户代码⽣成的警告
python中try except处理程序异常的三种常⽤⽅法
如果你在写python程序时遇到异常后想进⾏如下处理的话,⼀般⽤try来处理异常,假设有下⾯的⼀段程序:
try:
语句1
语句2
.
.
语句N
except .........:
do something ......
但是你并不知道"语句1⾄语句N"在执⾏会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停⽌程序的运⾏,所以在"except
......"这句应怎样来写呢?
总结了⼀下3个⽅法:
⽅法⼀:捕获所有异常
try:
a=b
b=c
except Exception,e:
print Exception,":",e
⽅法三:采⽤sys模块回溯最后的异常
#引⼊sys模块
import sys
try:
a=b
b=c
except:
info=_info()
print info[0],":",info[1]


发布评论