zoukankan      html  css  js  c++  java
  • 学学python(2):错误和异常

    1.       python中有很多中异常,比如使用没有申请的变量会为NameError,语法不对为SyntaxError,请求的索引超出序列范围为IndexError

    2.       异常处理:主要有两种形式try-excepttry-finally,我们只能使用其中的一种,一个try语句可以对应一个或多个except子句,但只能对应一个finally子句或是一个try-except-finally复合语句。

    Try-except-else:检测和处理异常,else子句处理没有探测到异常时执行的代码。
    try-finally
    :检测并做一些必要的清除工作。
    try-except-finally
    :上面两者都可以做到。

    下面举个例子说明,我们写一个转换为整数的函数,如下:

    def ConInt(obj):

         try:

             result=int(obj)

         except ValueError:

             result="could not convert"

         except TypeError:

             result='type is wrong'

         return result

    下面是函数调用:

    >>> ConInt('asd')

    'could not convert'

    >>> ConInt([1,2])

    'type is wrong'

    我们也可以在一个except中处理多个异常,将异常写为元组的形式如下

    def ConInt(obj):

         try:

             result=int(obj)

         except (ValueError,TypeError):

             result="could not convert" 

         return result

    3.       异常参数,可以携带更详细的异常信息,该参数以元组的方式放在except后面,下面是例子。

    >>> def ConInt(obj):

    ...  try:

    ...      result=int(obj)

    ...  except (ValueError,TypeError),diag:

    ...      result=str(diag)

    ...  return result

    ...

    >>> ConInt('asd')

    "invalid literal for int() with base 10: 'asd'"

    >>> ConInt([1,3])

    "int() argument must be a string or a number, not 'list'"

     

    4.       With语句:只工作于支持上下文管理协议的对象。比如file对象就支持,那我们就可以使用wirh,如下:

    With open(‘test.txt’,’r’) as f:

    For eachLine in f:

         # do something

    该段代码会视图打开一个文件,然后遍历文件中的每一行,完成后关闭文件,使用with的好处是这段代码无论哪里发生了异常,都会执行清理的代码,文件会被自动关闭。和使用try-finally是一样的。

    5.       触发异常

    使用raise[SomeException[,args [,traceback]]]语句来触发异常。

    参数SomeException为触发异常的名字,必须是字符串,类或实例。

    参数args为可选,指示错误原因的元组。

    参数traceback,可选,当异常触发时新生成一个用于异常-正常话的追踪对象,当你想重新引发异常时,该参数很有用,可以用来区别先前和当前的位置,如果没有写None

    6.可以通过sys模块中exc_info函数来获取异常信息,如下:

    >>> try:

    ...  int('asdf')

    ... except:

    ...  import sys

    ...  exc_tuple=sys.exc_info()

    ...

    >>> print exc_tuple

    (<type 'exceptions.ValueError'>, ValueError("invalid literal for int() with base 10: 'asdf'",), <traceback object at 0x0164B6E8>)

    >>> for item in exc_tuple:

    ...  print item

    ...  

    <type 'exceptions.ValueError'>

    invalid literal for int() with base 10: 'asdf'

    <traceback object at 0x0164B6E8>

    从后面的for中我们可以看出得到的异常元组包括三项信息,分别表示异常类,异常类的实例和追踪对象。

    7.     下图为python异常的继承体系结构: 

    clip_image002

    作者:生鱼片
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    JavaScript中函数和构造函数的区别
    如何使用less(变量,混合,匹配,运算,嵌套...)
    sublime text3 最常用的快捷键及插件
    ReentrantLock实现原理
    揭密FutureTask
    消息队列设计精要(转)
    漫谈MySql中的事务
    浅析Spring AOP
    理解java动态代理
    理解tomcat之搭建简易http服务器
  • 原文地址:https://www.cnblogs.com/carysun/p/python2.html
Copyright © 2011-2022 走看看