Python学习笔记(三)

Python 学习笔记(三) <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>

异常部分。

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 类似 javac++ 中的 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 子句,但两者不能共存。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值