python异常处理和程序调试:异常处理语句实例详解二
1. try...except语句的嵌套
这种语句就是多except语句的多处理方式,下面我们通过一个例题来学习一下try...except的语句嵌套。
1234567891011121314151617181920 | def test():
n
= int
(
input
(
'有3个语句需要测试,请选择(1/2/3):'
))
if n
=
= 1
:
#keyError异常情况
my_dict
= {
'dotcpp'
:
123
}
print
(my_dict[
'dot'
])
elif n
=
= 2
:
#IndexError异常
my_list
= [
1
,
2
,
3
,
4
,
5
]
print
(my_list[
100
])
elif n
=
= 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():
n
= 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
n
= 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():
n
= int
(
input
(
'请输入一个整数:'
))
print
(
'输入值为:'
,n)
try
:
test()
except ValueError:
print
(
'ValueError异常'
)
else
:
print
(
'当前程序未出现异常'
) |
输出结果为:
123 | 请输入一个整数:
5
输入值为:
5
当前程序未出现异常 |
当我们输入值为dotcpp时
12 | 请输入一个整数:dotcpp
ValueError异常 |
我们可以看出当程序异常的时候else语句并没执行,这些语句的区分难度并不大,大家可以通过例子去练习一下这几种常用的异常处理语句。