当前位置: 移动技术网 > IT编程>脚本编程>Python > Python异常学习笔记

Python异常学习笔记

2019年03月23日  | 移动技术网IT编程  | 我要评论

无锡太湖能园度假村,三部曲电影,斗战神监察特使

异常(exceptions)是python中一种非常重要的类型,它和语法错误不同,是在程序运行期间引发的错误。python中内置了很多异常,如ioerror,nameerror,keyboardinterrupt等,更多的异常可以。

异常的意义在于提供一种更加优雅的运行方式,例如用python编写一个计算器,如果用户输入不能计算的对象,则可以抛出异常,并进行处理, 如下:

while true:
  try:
    x= int(input('please in enter a number:'))
    print "your input is %s"%x
    break
  except exception,e:
    print e

python是一门面向对象的语言,异常本身也是对象, 用dir(exception)查看exception类的属性,如下:[‘__class__', ‘__delattr__', ‘__dict__', ‘__doc__', ‘__format__', ‘__getattribute__', ‘__getitem__', ‘__getslice__', ‘__hash__', ‘__init__', ‘__new__', ‘__reduce__', ‘__reduce_ex__', ‘__repr__', ‘__setattr__', ‘__setstate__', ‘__sizeof__','__str__', ‘__subclasshook__', ‘__unicode__', ‘args', ‘message'], 除开args和message外,其余的均为其内部属性, 其中args是传递给异常类的构造函数的一个类型为元祖的参数, 一些内置函数,如ioerror需要它接收多个参数,其它的则直接是直接传递一个错误提示字符串。

python的异常可以通过try语句来检查,任何在try语句块里的代码都会被监测,检查有无异常产生,except会根据输入检查异常的类型,并执行except内的代码。那么,这里就不禁要问问,except后面的两个参数到底是什么?如果第一个是错误的类型,那么第二参数呢?对其进行检测,发现它是属于exception的实例,也就是说,它是由异常类产生的一个具体的异常对象。
那么,用户如果自定义一个异常呢?python中规定,所有异常必须直接或者间接的继承自exception类,如下,自定义的异常:

#!/usr/bin/env python
class myerror(exception):
  def __init__(self,*args):
    self.value=args[0]
  def __str__(self):
    return repr(self.value)
def showname(*args):
  if args:
    print args
  else:
    raise myerror('error: need 1 arguments at last, 0 input')

把这个文件保存为showname.py,其它模块就可以引入调用showname函数,并对它执行的结果进行检测:

#!/usr/bin/env python
import showname
try:
  showname.showname()
except showname.myerror,e:
  print e

值得注意的几点是:1, python中用raise抛出异常; 2, 由于所有异常都是继承自exception,所以,当不确定异常类型的时候,可以在except后面直接接exception来捕获所有异常;3,由于异常的继承关系,异常内的所有属性都是可以被重定义的,也可以在自定义的异常上增加属性。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网