try_except__异常处理
有时候我们写程序的时候,会出现⼀些错误或异常,导致程序终⽌。例如,做除法时,除数为0,会引起⼀个ZeroDivisionError
例⼦:
运⾏结果:
Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>
c=a/b
ZeroDivisionError: integer division or modulo by zero
我们发现程序因为ZeroDivisionError ⽽中断了,语句print "done" 没有运⾏。为了处理异常,我们使⽤pt,更改代码:
运⾏结果:
integer division or modulo by zero
done
这样程序就不会因为异常⽽中断,从⽽print "done"语句正常执⾏。
我们把可能发⽣错误的语句放在try 模块⾥,⽤except 来处理异常。except 可以处理⼀个专门的异常,也可以处理⼀组圆括号中的异常,如果except 后没有指定异常,则默认处理所有的异常。每⼀个try ,都必须⾄少有⼀个except
处理⼀组异常可以这样写(其中e 代表异常的实例):
try ....lse 语句,当没有异常发⽣时,else 中的语句将会被执⾏。
例⼦:
运⾏结果:
no error
done
1
2
3
4a =10b =0c =a /b print "done"
1
2
3
4
5
6
7
8a =10b =0try : c =a /b print c except ZeroDivisionError,e: print e.message print "done"
1
2
3
4try : pass except (IOError ,ZeroDivisionError),e: print e
1
2
3
4
5
6
7
8
9
10a =10b =0try : c = b / a print c except (IOError ,ZeroDivisionError),x: print x else : print "no error"print "done"
⼆、raise 引发⼀个异常
例⼦:如果输⼊的数据不是整数,则引发⼀个ValueError
假设输⼊1.2,运⾏结果为:
please input a int data :1.2
Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>
raise ValueError
ValueError
如果输⼊1,运⾏结果为:
please input a int data :1
1
三、try ...finally
⽆论异常是否发⽣,在程序结束前,finally 中的语句都会被执⾏。
运⾏结果:
Traceback (most recent call last):
always excute
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 4, in <module>
print a/b
ZeroDivisionError: integer division or modulo by zero
虽然有异常发⽣,但在程序终⽌前,finally 中的语句也能正常执⾏。。
finally 语句也可以和except 语句⼀起使⽤。
运⾏结果:
error
always excute
四、⾃定义⼀个异常类
⾃定义⼀个MyException 类,继承Exception 。
如果输⼊的数字⼩于10,就引发⼀个MyException 异常:
1
2
3
4
5inputValue =input ("please input a int data :")if type (inputValue)!=type (1): raise ValueError else : print inputValue
1
2
3
4
5
6a =10b =0try : print a /b finally : print "always excute"
1
2
3
4
5
6
7
8a =10b =0try : print a /b except : print "error"finally : print "always excute"
1
2
3
4class MyException(Exception): def __init__(self ,message): Exception.__init__(self ) self .message =message
运⾏结果:
please input a num:1
my excepition is raised
五、所有的标准异常类:
1
2
3
4
5
6a =input ("please input a num:")if a<10: try : raise MyException("my excepition is raised ") except MyException,e: print e.message
异常名称
描述BaseException
所有异常的基类SystemExit
解释器请求退出KeyboardInterrupt
⽤户中断执⾏(通常是输⼊^C)Exception
常规错误的基类StopIteration
迭代器没有更多的值GeneratorExit
⽣成器(generator)发⽣异常来通知退出SystemExit
Python 解释器请求退出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
尚未实现的⽅法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处理程序异常的三种常⽤⽅法
如果你在写python程序时遇到异常后想进⾏如下处理的话,⼀般⽤try来处理异常,假设有下⾯的⼀段程序:
try:
语句1
语句2
.
.
语句N
except .........:
do something ......
但是你并不知道"语句1⾄语句N"在执⾏会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停⽌程序的运⾏,所以在"except ......"这句应怎样来写呢?
总结了⼀下3个⽅法:
⽅法⼀:捕获所有异常
try:
a=b
b=c
except Exception,e:
print Exception,":",e
⽅法⼆:采⽤traceback模块查看异常
#引⼊python中的traceback模块,跟踪错误
import traceback
try:
a=b
b=c
except:
traceback.print_exc()
⽅法三:采⽤sys模块回溯最后的异常
#引⼊sys模块
import syspython的try和except用法
try:
a=b
b=c
except:
_info()
print info[0],":",info[1]
但是,如果你还想把这些异常保存到⼀个⽇志⽂件中,来分析这些异常,那么请看下⾯的⽅法:把 traceback.print_exc() 打印在屏幕上的信息保存到⼀个⽂本⽂件中
import traceback
try:
a=b
b=c
except:
f=open("",'a')
traceback.print_exc(file=f)
f.flush()
f.close()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论