python异常处理和程序调试:异常处理语句实例详解二

  1. try...except语句的嵌套

这种语句就是多except语句的多处理方式,下面我们通过一个例题来学习一下try...except的语句嵌套。

1234567891011121314151617181920 def test():    = int ( input ( '有3个语句需要测试,请选择(1/2/3):' ))    if  = = 1 : #keyError异常情况      my_dict  = { 'dotcpp' 123 }      print (my_dict[ 'dot' ])    elif  = = 2 : #IndexError异常      my_list  = [ 1 2 3 4 5 ]      print (my_list[ 100 ])    elif  = = 3 : #NameError异常      print ( '不存在的变量dotcpp:' , dotcpp) try :    try :      try :        test()      except KeyError:        print ( 'KeyError异常' )    except IndexError:      print ( 'IndexError异常' ) except NameError:    print ( 'NameError异常' )

我们分别测试1/2/3,输出结果如下:

123456 3 个语句需要测试,请选择( 1 / 2 / 3 ): 1 KeyError异常 3 个语句需要测试,请选择( 1 / 2 / 3 ): 2 IndexError异常 3 个语句需要测试,请选择( 1 / 2 / 3 ): 3 NameError异常

在这个例题中,我们首先在定义的函数中输入一个判断量n,然后根据n的值给出了三种异常的情况,然后我们在最后嵌套了3个try..except语句,也就是说test()语句的结果会经过三层判断。

    2. try...except...finally语句

一个完整的异常处理机制是离不开finally语句的,这个语句的作用是不管我们的程序中是否有异常发生,finally语句下的代码都会被执行,它的语法格式为:

123456 try :      block except [typeerror]:      deal1 finally :      deal2

我们通过一个例子来看一下这种结构:

123456789 def test():    = int ( input ( '请输入一个整数:' ))    print (n) try :    test() except KeyError:    print ( 'KeyError异常' ) finally :    print ( 'finally语句已执行' )

我们分别输入6和dotcpp来看一下输出结果:

1234567891011 请输入一个整数: 5 5 finally 语句已执行 请输入一个整数:dotcpp finally 语句已执行 Traceback (most recent call last):    File "C:/Users/test.py" , line  5 in       test()    File "C:/Users/test.py" , line  2 in test      = int ( input ( '请输入一个整数:' )) ValueError: invalid literal  for int () with base  10 'dotcpp'

通过这个例子我们可以看出,无论我们的程序是否出现异常,finally语句都会执行。

    3. try...except...else语句

我们在上面学习的finally语句是无论语句是否发生异常都会执行的语句,下面我们来学习的try...except...else语句当程序中未发生异常的时候才会执行,它的语法结构为:

123456 try :      block except [typeerror ]:      deal1 else :      deal2

下面我们看例子:

123456789 def test():    = int ( input ( '请输入一个整数:' ))    print ( '输入值为:' ,n) try :    test() except ValueError:    print ( 'ValueError异常' ) else :    print ( '当前程序未出现异常' )

输出结果为:

123 请输入一个整数: 5 输入值为:  5 当前程序未出现异常

当我们输入值为dotcpp时

12 请输入一个整数:dotcpp ValueError异常

我们可以看出当程序异常的时候else语句并没执行,这些语句的区分难度并不大,大家可以通过例子去练习一下这几种常用的异常处理语句。