1、try ... except ...
我们可以使用try..except
语句来处理异常。我们把通常的语句放在try-块中,而把我们的错误处理语句放在except-块中。
当试图读入一个用户输入时,用户按下了Ctrl + d,Python会跑出异常
>>> try:
s = input('请输入一个字符串:')
except EOFError:
print('\nEOFError异常处理:用户输入过程产生异常')
当以只读的方式打开一个不存在文件的时候会跑出IOError异常:因此:
#尝试以只读的方式打开一个不存在的文件,并进行异常处理
try:
fp = open('file.txt','r')
except IOError:
print("异常处理:打开文件file.txt失败")
#尝试以写入的方式打开一个不存在的文件,并进行异常处理
try:
fp = open('file.txt','w')
#打印一个没有定义的变量,跑出NameError异常
print(name)
except IOError:
print("异常处理:打开文件file.txt失败")
except NameError:
print('异常处理:变量name没有定义')
#在捕获的异常中处理
name = 'jiezhj'
#写入一行
fp.write(name + '\n')
fp.write(name)
fp.write(name)
fp.write(name)
fp.close()
异常的抛出机制:
1、如果在运行时发生异常,解释器会查找相应的处理语句(称为handler).
2、要是在当前函数里没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理。
3、如果在最外层(全局“main”)还是没有找到的话,解释器就会退出,同时打印出traceback以便让用户找到错误产生的原因。
#FileName : except.py
#定义一个方法用于打开文件
def func(FileName):
try:
#以只读的方式打开文件FileName
fp = open(FileName,'r')
except NameError:
print('异常处理:函数内部异常')
except IOError:
print('func异常处理:文件hello.txt打开错误!')
#定义一个方法用于调用方法func
def callFunc():
try:
#传递文件名
func('hello.txt')
except IOError:
print('callFunc异常处理:文件hello.txt打开错误!')
callFunc()
异常被func方法中的except截获:
将方法func中的异常处理注释掉之后,异常会向调用方法func的函数中抛出
#FileName : except.py
#定义一个方法用于打开文件
def func(FileName):
try:
#以只读的方式打开文件FileName
fp = open(FileName,'r')
except NameError:
print('异常处理:函数内部异常')
#将fun中的异常处理注释掉
# except IOError:
# print('func异常处理:文件hello.txt打开错误!')
#定义一个方法用于调用方法func
def callFunc():
try:
#传递文件名
func('hello.txt')
except IOError:
print('callFunc异常处理:文件hello.txt打开错误!')
callFunc()
让try..catch
块关联上一个else
从句。当没有异常发生的时候,else
从句将被执行。