zoukankan      html  css  js  c++  java
  • Python学习之异常处理

    1.首先了解错误和异常的概念:

    错误:代码运行前的代码错误或者是程序执行过程中的逻辑错误
    1:语法错误:代码不符合解释器或者编译器语法(代码错误)
    2:逻辑错误:不完整或者不合法输入或者计算出现问题(输入时或者计算时,比如除零操作等)
    异常:执行过程中出现问题导致程序无法继续执行
    1:程序遇到逻辑或者算法问题(代码错误导致程序无法正确的执行)
    2:运行过程中计算机错误(内存不够或者IO错误)(硬件环境出现问题)

    2.错误和异常的区别:

      错误中的语法错误会在解释器或编译发现的,但是逻辑错误是无法通过解释其或编译器来预判的,而在程序执行的过程中,如果出现错误,编译器或解释器检查到错误就认为是异常,则会抛出异常;而异常的处理有截获、忽略、终止程序,一般如果我们没有人为的对异常进行截获的话,异常就会终止程序的运行

    3.Python常见的错误:

      1、NameError 变量没定义就使用
      2、SyntaxError 语法错误
      3、IOError 打开一个不存在的目录或文件 
      4.ZeroDivisionError  10/0 除数为0了  逻辑错误
      5.a=int('dd') :ValueError 传入值无效
      6.KeyboardInterrupt  强制终止程序产生,比如按下Ctrl+C
    7.IndentionError:缩进问题

    4.工作原理

      1.首先执行try中的语句

      2.如果没有发生异常,则忽略except,执行完try的语句

      3.如果发生ic行,那么会暂时或略try中发生异常后的语句,如果发生异常的类型与except后的名称相符,则执行except后的语句,然后再执行try中未执行的语句。

      4.如果发生异常,但无任何except匹配,、那么这个异常就会往上传递给上层的try,直到找不到就会停止程序的执行。

    5.常用的几种方式:

      1.try .... finally 

    try:
        pass
    finally:
        #如果没有捕获到异常,该代码库执行
        #如果捕获到异常,先执行这个,再给解释器处理异常
        #总之,如何都要执行这里面的语句

      2.try ... except ... finally

    try:
        pass 
    except:
        #异常处理
    finally:
        #必须要做的事
    
    #1)如果没有捕获到异常,执行完try后就执行finally
    #2)如果捕获到异常,try=》except=》try中未执行完的语句=》finally
    #3)else与finally的区别是,else是没有捕获到异常时才执行的,而finally是不管怎样都会执行的

      3.try .... except ... else

    try:
        pass 
    except: 
        #异常处理
    else:
        #未捕获到异常时要执行的语句

    traceback相关:

    python中用于处理异常栈的模块是traceback模块,它提供了print_exception、format_exception等输出异常栈等常用的工具函数。

    其实traceback.print_exc()函数只是traceback.print_exception()函数的一个简写形式,traceback.format_exc()函数是traceback.format_exception()的一个简写形式。而它们获取异常相关的数据都是通过sys.exc_info()函数得到的。

    sys.exc_info()返回的值是一个元组,分别是,exc_type是异常的对象类型,exc_value是异常的值,exc_tb是一个traceback对象,对象中包含出错的行数、位置等数据。然后通过print_exception函数对这些异常数据进行整理输出

    def func(a, b):
        return a / b
    if __name__ == '__main__':
        import sys
        import traceback
        try:
            func(1, 0)
        except Exception as e:
            print "print_exception()"
            exc_type, exc_value, exc_tb = sys.exc_info()
            print 'the exc type is:', exc_type
            print 'the exc value is:', exc_value
            print 'the exc tb is:', exc_tb
            traceback.print_exception(exc_type, exc_value, exc_tb)
  • 相关阅读:
    Mondriaan's Dream POJ
    H
    Superdoku Kattis
    Corn Fields POJ
    旅行的意义 Gym
    G
    J
    Welcome Party ZOJ
    redis入门到精通系列(三):key的通用操作和redis内部db的通用操作
    redis入门到精通系列(二):redis操作的两个实践案例
  • 原文地址:https://www.cnblogs.com/fireporsche/p/7835673.html
Copyright © 2011-2022 走看看