程序执行过程中,如果发生错误,比如遇到NameError,ValueError,TypeError等,程序将会抛出异常,并终断程序的执行。
如果不想程序终止,可以捕获这些异常并执行相应的操作。
Python中捕获异常使用的语句如下:
-
try:
-
正常的操作
-
except exception1:
-
如发生异常exception1则执行这个代码块
-
except exception2 as e:
-
如发生异常exception2则执行这个代码块
-
except (exception3, exception4):
-
如发生异常exception3或者exception4则执行这个代码块
-
except Exception as e:
-
print(e)
-
发生其他的异常执行这个代码块
-
异常的父类,可以捕获所有异常并打印出来
-
else:
-
没有发生异常执行这个代码块
-
finally:
-
总是要执行的代码块
-
出现异常时跳出try代码块,并立即执行这个代码块,然后执行异常代码块
-
没有发生异常,执行完try代码块后执行这个代码块
try...except举例:
-
while True:
-
try:
-
x = int(input("Please enter a number: "))
-
break
-
except ValueError:
-
print("Oops! That was no valid number. Try again ")
执行结果:
Please enter a number: ww
Oops! That was no valid number. Try again
Please enter a number:
Oops! That was no valid number. Try again
Please enter a number: 89
在这个例子中,如果不使用异常,用户如果输入一个字符串,因为字符串无法转换为int型数据,程序将直接抛出异常并结束。
而使用异常后,程序能捕获这个异常并提示用户数据无效,要求用户再次输入,直到输入正确的数据跳出这个循环。
try...finally举例:
-
try:
-
f = open('myfile.txt', 'w')
-
try:
-
f.write('the test file')
-
finally:
-
print('close the file')
-
f.close()
-
except IOError:
-
print('Error: 没有找到文件或者文件读取失败')
finally子句不管是否出现异常都会执行。
在这个例子中,如果异常出现在f = open('myfile.txt', 'w')(比如myfile.txt是只读文件),则文件打开失败,执行except语句,提示‘
Error: 没有找到文件或者文件读取失败’,程序退出。
如果异常发生在f.write('the test file'),文件写入失败,执行expect语句后,还会执行finally语句,从而关闭文件。这样不管有没有异常能能够保证打开的文件会被关闭。
这一段代码可以用with...as...语句替代, 这个语句可以自动关闭打开的文件:
-
with open('myfile.txt', 'w') as f:
-
f.write('the test file')
-
阅读(1111) | 评论(0) | 转发(0) |