try except
有时候我们写程序的时候, 会出现一些错误或异常, 导致程序终止. 例如, 做除法时, 除数为 0, 会引起一个 ZeroDivisionError
- a = 10
- b = 0
- c = a/b
- print("done")
运行结果:
Traceback (most recent call last):File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>c=a/bZeroDivisionError: integer division or modulo by zero
我们发现程序因为 ZeroDivisionError 而中断了, 语句 print "done" 没有运行. 为了处理异常, 我们使用 try...except, 更改代码:
- a=10
- b=0
- try:
- c=a/b
- print c
- except ZeroDivisionError,e:
- print e.message
- print "done"
运行结果:
integer division or modulo by zerodone
这样程序就不会因为异常而中断, 从而 print "done" 语句正常执行.
我们把可能发生错误的语句放在 try 模块里, 用 except 来处理异常. except 可以处理一个专门的异常, 也可以处理一组圆括号中的异常, 如果 except 后没有指定异常, 则默认处理所有的异常. 每一个 try, 都必须至少有一个 except
处理一组异常可以这样写 (其中 e 代表异常的实例):
- try:
- pass
- except (IOError ,ZeroDivisionError),e:
- print e
try ....except...else 语句, 当没有异常发生时, else 中的语句将会被执行.
- a=10
- b=0
- try:
- c = b/ a
- print c
- except (IOError ,ZeroDivisionError),x:
- print x
- else:
- print "no error"
- print "done"
运行结果:
0no errordone
raise 引发异常
例子: 如果输入的数据不是整数, 则引发一个 ValueError
- inputValue=input("please input a int data :")
- if type(inputValue)!=type(1):
- raise ValueError
- else:
- print inputValue
假设输入 1.2, 运行结果为:
please input a int data :1.2Traceback (most recent call last):File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>raise ValueErrorValueError
如果输入 1, 运行结果为:
- please input a int data :11
- try finally
无论异常是否发生, 在程序结束前, finally 中的语句都会被执行.
- a=10
- b=0
- try:
- print a/b
- finally:
- print "always excute"
运行结果:
Traceback (most recent call last):always excuteFile "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 4, in <module>print a/bZeroDivisionError: integer division or modulo by zero
虽然有异常发生, 但在程序终止前, finally 中的语句也能正常执行..
finally 语句也可以和 except 语句一起使用.
- a=10
- b=0
- try:
- print a/b
- except:
- print "error"
- finally:
- print "always excute"
运行结果:
- error
- always excute
自定义一个异常类
自定义一个 MyException 类, 继承 Exception.
- class MyException(Exception):
- def __init__(self,message):
- Exception.__init__(self)
- self.message=message
如果输入的数字小于 10, 就引发一个 MyException 异常:
- a=input("please input a num:")
- if a<10:
- try:
- raise MyException("my excepition is raised")
- except MyException,e:
- print e.message
运行结果:
please input a num:1my excepition is raised
python 所有的标准异常类
|
来源: http://www.bubuko.com/infodetail-2744877.html