Python
				学习笔记(三)
				
						
						
						
				
		
		
				异常部分。
				
						
						
				
		
		
				
						1.          
				
				处理异常
				
						
						
				
		
		
				Eg
				:
				
						
						
				
		
		
				import sys
		
		
				try:
		
		
				
						    f = open('myfile.txt')
		
		
				
						    s = f.readline()
		
		
				
						    i = int(s.strip())
		
		
				except IOError, (errno, strerror):
		
		
				
						    print "I/O error(%s): %s" % (errno, strerror)
		
		
				except ValueError:
		
		
				
						    print "Could not convert data to an integer."
		
		
				except:
		
		
				
						    print "Unexpected error:", sys.exc_info()[0]
		
		
				
						    raise
		
		
				和
				java
				对比,差不多的用法。只是他不存在花括号。以冒号和缩进进行的作用域封装。还有就是
				except 
				类似
				java
				或
				c++ 
				中的
				catch 
				。
				
						
						
				
		
		
				try ... except 
				语句可以带有一个
				 else 
				子句,
				
				
				该子句只能出现在所有
				 except 
				子句之后。当
				 try 
				语句没有抛出异常时,需要执行一些代码,可以使用这个子句。例如:
				
						
						
				
		
		
				for arg in sys.argv[1:]:
		
		
				
						    try:
		
		
				
						        f = open(arg, 'r')
		
		
				
						    except IOError:
		
		
				
						        print 'cannot open', arg
		
		
				
						    else:
		
		
				
						        print arg, 'has', len(f.readlines()), 'lines'
		
		
				
						        f.close()
		
		
				
						2.          
				
				抛出异常
				
						
						
				
		
		
				Eg
				:
				
						
						
				
		
		
				try:
		
		
				
						    raise NameError, 'HiThere'
		
		
				except NameError,a:
		
		
				
						   
						 print 'An exception flew by!'
		
		
				
						    #raise
		
		
				
						    print type(a)
		
		
				print a.args
		
		
				主要函数
				raise , 
				该函数第一个参数是异常名,第二个是这个异常的实例,它存储在
				 instance.args 
				的参数中。
				
						
						
				
		
		
				except NameError,a: 
				中第二个参数意思差不多。
				
						
						
				
		
		
				
						3.          
				
				用户自定义异常
				
						
						
				
		
		
				class MyError(Exception):
		
		
				
						    def __init__(self, value):
		
		
				
						        self.value = value
		
		
				
						    def __str__(self):
		
		
				
						      return repr(self.value)
		
		
				try:
		
		
				
						  raise MyError(2*2)
		
		
				except MyError, e:
		
		
				
						  print 'My exception occurred, value:', e.value
		
		
				异常类中可以定义任何其它类中可以定义的东西,但是通常为了保持简单,只在其中加入几个属性信息,以供异常处理句柄提取。如果一个新创建的模块中需要抛出几种不同的错误时,一个通常的作法是为该模块定义一个异常基类,然后针对不同的错误类型派生出对应的异常子类。
				
						
						
				
		
		
				Eg:
		
		
				class Error(Exception):
		
		
				
						    """Base class for exceptions in this module."""
		
		
				
						    pass
		
		
				
						 
				
		
		
				class InputError(Error):
		
		
				
						    """Exception raised for errors in the input.
		
		
				
						 
				
		
		
				
						    Attributes:
		
		
				
						        expression -- input expression in which the error occurred
		
		
				
						        message -- explanation of the error
		
		
				
						    """
		
		
				
						 
				
		
		
				
						    def __init__(self, expression, message):
		
		
				
						        self.expression = expression
		
		
				
						        self.message = message
		
		
				
						 
				
		
		
				class TransitionError(Error):
		
		
				
						    """Raised when an operation attempts a state transition that's not
		
		
				
						    allowed.
		
		
				
						 
				
		
		
				
						    Attributes:
		
		
				
						        previous -- state at beginning of transition
		
		
				
						        next -- attempted new state
		
		
				
						        message -- explanation of why the specific transition is not allowed
		
		
				
						    """
		
		
				
						 
				
		
		
				
						    def __init__(self, previous, next, message):
		
		
				
						        self.previous = previous
		
		
				
						        self.next = next
		
		
				
						        self.message = message
		
		
				
						4.          
				
				定义清理行为
				
						
						
				
		
		
				try 
				语句还有另一个可选的子句,目的在于定义在任何情况下都一定要执行的功能。例如:
				
				
		
		
				>>> try:
		
		
				...     raise KeyboardInterrupt
		
		
				... finally:
		
		
				...     print 'Goodbye, world!'
		
		
				...
		
		
				Goodbye, world!
		
		
				Traceback (most recent call last):
		
		
				
						  File "<stdin>", line 2, in ?
		
		
				KeyboardInterrupt
		
		
				不管
				try
				子句中有没有发生异常,
				
						finally
				
				
				
				子句都一定会被执行。如果发生异常,在
				 finally 
				子句执行完后它会被重新抛出。
				 try 
				子句经由
				 break 
				或
				 return 
				退出也一样会执行
				 finally 
				子句。
				
				
		
		
				
						在
						 try 
				
				
						语句中可以使用若干个
						 except 
				
				
						子句或一个
						 finally 
				
				
						子句,但两者不能共存。
						
								
								
						
				
		
	posted on 2008-04-10 15:04 
-274°C 阅读(662) 
评论(0)  编辑  收藏  所属分类: 
python