Python学习之异常处理详解

异常处理是Python开发不可避免的,进行异常处理,可以帮我们调试代码,使代码找起问题更加简单,更加容易哦。本文和大家分享的就是python中常见的一些异常处理,一起来看看吧。

  一般都是利用Try,比较简单,代码也不复杂。

  try:

  print 'try...'

  r = 10 / 0

  print 'result:', rexcept ZeroDivisionError, e:

  print 'except:', efinally:

  print 'finally...'print 'END'

  使用 try...except 捕获错误有一个巨大的好处,就是可以跨越多层调用,比如函数 main()调用 foo()  foo() 调用 bar() ,结果 bar() 出错了,这时,只要 main() 捕获到了,就可以处理:

  def foo(s):

  return 10 / int(s)

  def bar(s):

  return foo(s) * 2

  def main():

  try:

  bar('0')

  except StandardError, e:

  print 'Error!'

  finally:

  print 'finally...'

  也就是说,不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了。这样一来,就大大减少了写 try...except...finally 的麻烦。

  异常应该是类对象。模块中定义了例外  exceptions 。此模块不需要显式导入:异常在内置命名空间以及  exceptions 模块中提供。

  对于类异常,在 try 同一个声明中 except 说提到的一类特殊条款,该条款还处理来自类(从中但也不例外类派生的任何异常类它派生)。通过子类化不相关的两个异常类永远不是等效的,即使它们具有相同的名称。

  下面列出的内置异常可以由解释器或内置函数生成。除了提及的地方,他们有一个关联值,指示错误的详细原因。这可能是包含几个信息项的字符串或元组(例如,错误代码和解释代码的字符串)。关联值是语句的第二个参数  raise 。如果异常类是从标准根类派生的 BaseException,则相关联的值将作为异常实例的 args 属性存在。

  用户代码可以引发内置异常。这可以用于测试异常处理程序或报告错误条件就像解释器引发相同异常的情况但请注意,没有任何可以防止用户代码提出不正确的错误。

  内置的异常类可以被子类化以定义新的异常鼓励程序员从 Exception 类或其子类之一导出新的异常,而不是从 BaseException 。有关定义异常的更多信息,请参见Python教程中  用户定义的异常 。

  以下异常仅用作其他异常的基类。

  异常 BaseException

  所有内置异常的基类。它不是直接由用户定义的类继承(为此使用 Exception )。如果  str() 或者 unicode() 是在这个类的一个实例上被调用,返回实例的参数表示,或者当没有参数时,返回空字符串。

  args

  给异常构造函数的元组元组。一些内置异常(如 IOError )期望一定数量的参数,并为此元组的元素分配特殊含义,而其他异常通常仅使用单个字符串给出错误消息。

  异常 Exception

  所有内置的,非系统退出的异常都是从这个类派生出来的。所有用户定义的异常也应该从此类派生。

  更改版本2.5:更改为继承 BaseException 

  异常 StandardError

  该基类除了所有内置例外 StopIteration   GeneratorExit  KeyboardInterrupt  SystemExit   StandardError 本身源于 Exception 

  异常 ArithmeticError

  对于那些内置异常的基类时引发的各种算术错误: OverflowError  ZeroDivisionError  FloatingPointError 

  异常 BufferError

  当无法执行 缓冲区 相关操作时引发。

  异常 LookupError

  当映射或序列上使用的键或索引无效时引发异常的基类: IndexError  KeyError 。这可以直接提出来 codecs.lookup() 

  异常 EnvironmentError

  对于可以在Python的系统外发生异常的基类:  IOError  OSError 。当使用2元组创建此类型的异常时,第一个项目在实例的 errno 属性上可用(假设为错误号),第二个项目在属性上 strerror 可用(通常是关联的错误消息)。元组本身也可以在属性上使用 args 

  新版本1.5.2

  当使用 EnvironmentError 3元组实例化异常时,前两个项目如上所述,而第三个项目在该 filename 属性上 可用。但是,为了向后兼容,该  args 属性仅包含前两个构造函数参数的2元组。

  该 filename 属性是 None 使用3个参数以外的其他异常创建的。的 errno  strerror 属性也 None 当实例与其他大于2个或3个参数创建。在最后一种情况下, args 将逐个构造函数的参数包含为元组。

  以下异常是实际引发的异常。

  异常 AssertionError

  当 assert 声明失败时提起。

  异常 AttributeError

  属性引用(请参阅 属性引用 )或赋值失败时引发。(当一个对象根本不支持属性引用或属性赋值时, TypeError 会被提出。)

  异常 EOFError

  当其中一个内置函数( input()  raw_input() )在没有读取任何数据的情况下触发文件结束条件(EOF)时引发。(注:在  file.read()  file.readline() 方法时,他们打EOF返回一个空字符串。)

  异常 FloatingPointError

  当浮点操作失败时触发。这个异常总是定义的,但是只有当Python配置了该 --with-fpectl 选项,或者 WANT_SIGFPE_HANDLER  pyconfig.h 文件中定义了符号时,才能引发此异常 

  异常 GeneratorExit

  当 发电机  close() 方法被调用时 提起 。它直接继承 BaseException 而不是, StandardError 因为它在技术上不是错误。

  在版本2.6中更改 :更改为继承 BaseException 

  异常 IOError

  当I / O操作(如 print 语句,内置  open() 函数或文件对象的方法)因I / O相关原因(例如未找到文件磁盘已满)而失败时引发。

  此类衍生 EnvironmentError 。有关异常实例属性的更多信息,请参阅上面的讨论。

  在版本2.6中更改 :更改 socket.error 为使用此作为基类。

  异常 ImportError

  当 import 语句找不到模块定义或找不到要导入的名称时引发。 from ... import

  异常 IndexError

  当序列下标超出范围时提起。(Slice索引被静默地截断以落在允许的范围内;如果索引不是一个纯整数,  TypeError 则会被提升。)

  异常 KeyError

  当在现有密钥集中找不到映射(字典)键时引发。

  异常 KeyboardInterrupt

  当用户点击中断键(正常 Control-C   Delete )时触发。在执行期间,定期检查中断。当内置函数 input()  raw_input() 正在等待输入时,键入的中断也会引发此异常。异常继承  BaseException 而不被意外地捕获 Exception 并因此阻止解释器退出的代码。

  更改版本2.5:更改为继承 BaseException 

  异常 MemoryError

  当操作内存不足时提起,但情况可能仍然会被抢救(通过删除某些对象)。相关联的值是一个字符串,指示什么样的(内部)操作用完了内存。请注意,由于底层内存管理架构(C的 malloc() 功能),解释器可能并不总是能够从这种情况中完全恢复但是它引发了一个异常,以便可以打印堆栈跟踪,以防万一出现程序的原因。

  异常 NameError

  当找不到本地或全球名称时提起。这仅适用于不合格的名称。相关联的值是一个错误消息,其中包含无法找到的名称。

  异常 NotImplementedError

  这个异常来源于 RuntimeError 。在用户定义的基类中,当需要派生类来覆盖该方法时,抽象方法应引发此异常。

  异常 OSError

  这个异常来源于 EnvironmentError 。当函数返回与系统相关的错误(不是非法参数类型或其他偶然错误)时引发。的 errno 属性是从一个数字错误代码 errno ,并且 strerror 属性是相应的字符串,如将被C函数被打印 perror() 。请参阅模块 errno ,其中包含由底层操作系统定义的错误代码的名称。

  对于涉及文件系统路径(例如 chdir()   unlink() )的异常,异常实例将包含第三个属性 filename ,即传递给该函数的文件名。

  新版本1.5.2

  异常 OverflowError

  当算术运算的结果太大而不能被表示时提升。对于长整型(这不会  MemoryError 放弃)而且对于大多数具有纯整数的操作,这不会返回长整数。由于在C中缺少浮点异常处理的标准化,大多数浮点运算也没有被检查。

  异常 ReferenceError

  当由 weakref.proxy() 函数创建的弱引用代理 在垃圾回收之后用于访问指称对象的属性时,会引发此异常。有关弱引用的更多信息,请参阅该 weakref 模块。

  2.2版中的新功能:以前被称为 weakref.ReferenceError 异常。

  异常 RuntimeError

  当检测到不属于任何其他类别的错误时引发。相关联的值是一个字符串,表示正确的错误。

  异常 StopIteration

  由 迭代器  next() 方法引发,表明没有其他值。这是从而 Exception 不是 StandardError,因为这不被认为是其正常应用程序中的错误。

  版本2.2中新增。

  异常 SyntaxError

  解析器遇到语法错误时引发。这可能发生在  import 语句, exec 语句,调用内置函数 eval()  input() 读取初始脚本或标准输入(也可交互式)时。

  这个类的实例有属性 filename  lineno   offset 并且 text 为的细节更容易获得。  str() 的异常实例仅返回消息。

  异常 IndentationError

  与错误缩进相关的语法错误的基类。这是一个子类 SyntaxError 

  异常 TabError

  缩进时引发的标签和空格不一致。这是一个子类 IndentationError 

  异常 SystemError

  当翻译发现内部错误时,提出了这种情况,但情况并不那么严重,导致它放弃了所有的希望。相关联的值是一个字符串,表示出现错误(低级别)。

  您应该向Python解释器的作者或维护者报告。确保报告Python解释器的版本( sys.version 它也是在交互式Python会话开始时打印的),确切的错误消息(异常关联值)以及触发错误的程序源可能的可能。

  异常 SystemExit

  该异常由 sys.exit() 函数引发。当它不被处理时,Python解释器退出不打印堆栈追溯。如果关联值为纯整数,则指定系统退出状态(传递给C的 exit() 函数)如果是 None ,退出状态为零如果有其他类型(如字符串),则打印对象的值,退出状态为一。

  实例具有 code 设置为建议的退出状态或错误消息(默认为 None )的属性。此外,这种异常直接来自于 BaseException 而不是 StandardError ,因为它在技术上不是错误。

  调用 sys.exit() 被转换为异常,以便清理处理程序( finally 语句的 try 子句)可以被执行,并且调试器可以执行脚本而不会失去控制的风险。 os._exit() 如果绝对有必要立即退出(例如,在调用后的子进程 os.fork() )中,则可以使用该函数。

  唯一的例外来自继承 BaseException ,而不是 StandardError  Exception 使得它不会意外地被映入代码捕获  Exception 。这允许异常正常传播并导致解释器退出。

  更改版本2.5:更改为继承 BaseException 

  异常 TypeError

  当操作或功能应用于不适当类型的对象时提起。关联值是一个字符串,提供有关类型不匹配的详细信息。

  异常 UnboundLocalError

  当引用函数或方法中的局部变量时引用,但没有值绑定到该变量。这是一个子类  NameError

  异常 UnicodeError

  当与Unicode相关的编码或解码错误发生时引发。它是一个子类 ValueError 

  UnicodeError 具有描述编码或解码错误的属性。例如, err.object[err.start:err.end] 给出编解码器失败的特定无效输入。

  encoding

  引起错误的编码的名称。

  reason

  描述特定编解码器错误的字符串。

  object

  编解码器正在尝试编码或解码的对象。

  start

  第一个无效数据索引 object 

  end

  上次无效数据后的索引 object 

  异常 UnicodeEncodeError

  在编码期间发生Unicode相关错误时引发。它是一个子类  UnicodeError 

  异常 UnicodeDecodeError

  在解码过程中发生Unicode相关错误时引发。它是一个子类  UnicodeError 

  异常 UnicodeTranslateError

  在翻译期间发生Unicode相关错误时引发。它是一个子类 UnicodeError 

  异常 ValueError

  当内置操作或函数接收到具有正确类型但不正确值的参数时引发,并且情况未被更精确的异常描述,例如 IndexError 

  异常 VMSError

  仅适用于VMS。发生VMS特定错误时引发。

  异常 WindowsError

  当出现特定于Windows的错误或错误号不对应于某个 errno 值时引发。该 winerror   strerror 值是从的返回值创建  GetLastError()  FormatMessage() Windows平台的API函数。该 errno 值将值映射 winerror 到相应的 errno.h 值。这是一个子类 OSError 

  版本2.5更改:以前的版本将 GetLastError() 代码放入 errno 

  异常 ZeroDivisionError

  当分割或模运算的第二个参数为零时提升。关联值是指示操作数的类型和操作的字符串。

  以下例外被用作警告类别;  warnings 有关详细信息,请参阅该模块。

  异常 Warning

  警告类别的基类。

  异常 UserWarning

  由用户代码生成的警告的基类。

  异常 DeprecationWarning

  关于已弃用功能的警告的基类。

  异常 PendingDeprecationWarning

  关于将来不推荐使用的功能的警告的基类。

  异常 SyntaxWarning

  关于可疑语法的警告的基类。

  异常 RuntimeWarning

  关于可疑运行时行为的警告的基类。

  异常 FutureWarning

  关于将来会在语义上改变的结构的警告的基类。

  异常 ImportWarning

  关于模块进口中可能出现的错误的警告的基础类。

  异常 UnicodeWarning

  与Unicode有关的警告的基类。

  异常层次

  内置异常的类层次结构为:

  BaseException

  +-- SystemExit

  +-- KeyboardInterrupt

  +-- GeneratorExit

  +-- Exception

  +-- StopIteration

  +-- StandardError

  |    +-- BufferError

  |    +-- ArithmeticError

  |    |    +-- FloatingPointError

  |    |    +-- OverflowError

  |    |    +-- ZeroDivisionError

  |    +-- AssertionError

  |    +-- AttributeError

  |    +-- EnvironmentError

  |    |    +-- IOError

  |    |    +-- OSError

  |    |         +-- WindowsError (Windows)

  |    |         +-- VMSError (VMS)

  |    +-- EOFError

  |    +-- ImportError

  |    +-- LookupError

  |    |    +-- IndexError

  |    |    +-- KeyError

  |    +-- MemoryError

  |    +-- NameError

  |    |    +-- UnboundLocalError

  |    +-- ReferenceError

  |    +-- RuntimeError

  |    |    +-- NotImplementedError

  |    +-- SyntaxError

  |    |    +-- IndentationError

  |    |         +-- TabError

  |    +-- SystemError

  |    +-- TypeError

  |    +-- ValueError

  |         +-- UnicodeError

  |              +-- UnicodeDecodeError

  |              +-- UnicodeEncodeError

  |              +-- UnicodeTranslateError

  +-- Warning

  +-- DeprecationWarning

  +-- PendingDeprecationWarning

  +-- RuntimeWarning

  +-- SyntaxWarning

  +-- UserWarning

  +-- FutureWarning

  +-- ImportWarning

  +-- UnicodeWarning

  +-- BytesWarning

 

来源:Linux公社

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值