和JAVA语言一样,Python也用try关键字来处理异常。
为什么处理异常非常重要呢?
主要原因
:很多操作只要‘尝试’了才知道会不会成功。比如,
用python打开一个txt文件,并把txt文件中的字符串转换成整型数
。
try的搭配通常有“try... except...”,也可以有"try...finally"等。我们先看"try...except...",
实验准备:
1. 一个txt文件,t1.txt,里面内容是"123":
123
2. 一个python脚本, try.py :
file_path = 't1.txt'
try:
f = open(file_path, 'r')
str_content = f.read()
a = int(str_content)
print(a)
except Exception:
print('hh')
直接运行脚本,
会发现except下面的print('hh')不会运行
。因为txt文件中的内容正常(是数字型的字符串)。那么,如果把t1.txt中的内容换成:
abc
再运行try.py,会发现脚本只会输出'hh',说明代码汇报了异常。
因为字符'abc'没办法用int()变成整型数字
。
到这里,一个最基本的异常处理实验就完成了
。继续往下看,
如果t1.txt文件本就不存在呢?
python脚本读取这个txt时,同样也会出现异常的,这是另一种异常。不修改上述脚本try.py中的代码运行,会发现还是会输出'hh',报告异常。但作为代码老司机,还是想区分这两种异常。那么,就需要代码汇报更细致一点,修改后如下:
file_path = 't1.txt'
try:
f = open(file_path, 'r')
str_content = f.read()
a = int(str_content)
print(a)
except ValueError:
print(file_path + '中内容不可转化为数字!')
except FileNotFound:
print(file_paht + '文件不存在!')
except Exception:
print('未知错误!')
这样就麻溜儿处理了两种不同的异常。这里的except后面接的"ValueError"和"FileNotFound"关键字是怎么知道的呢?
只需制造同样的异常,看console提示就行了
。
到这里,try...except...关键字就差不多了。我们再看看finally的用法:
file_path = 't1.txt'
try:
f = open(file_path, 'r')
str_content = f.read()
a = int(str_content)
print(a)
except Exception:
print('未知错误!')
finally:
print(file_path)
相比except而言,finally关键字简单多了,代表最后运行的代码。无论有没有异常,都会运行的代码块,我们就放到finally中。那么,上述代码就相当于:
file_path = 't1.txt'
try:
f = open(file_path, 'r')
str_content = f.read()
a = int(str_content)
print(a)
except Exception:
print('未知错误!')
print(file_path)
官方描述为:
A finally clause is always executed before leaving the try statement, whether an exception has occurred or not.