python中try/except/finally关键字的使用

和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.

发布了147 篇原创文章 · 获赞 1858 · 访问量 90万+

猜你喜欢

转载自blog.csdn.net/leviopku/article/details/104265284