Python

Python 知识量:10 - 41 - 150

9.3 清理操作><

finally代码块- 9.3.1 -

finally代码块用于在try/except块中进行清理操作。最重要的一点是:finally块总是会执行,要么与try块一起执行;要么与except块一起执行。finally经常用于必须执行的代码部分。

# exception.py
def to_int(string,base):
    try:
        print(int(string,base))
    except:
        print('Error occurred!')
    finally:
        print('Finally executed.')

运行结果为:

>>> 
==================== RESTART: D:/PythonTestFile/exception.py ===================
>>> to_int('1000',2)
8
Finally executed.
>>> to_int('s',2)
Error occurred!
Finally executed.
>>> to_int(1000,2)
Error occurred!
Finally executed.

finally的执行顺序- 9.3.2 -

上节示例中,finally块的执行顺序位于try或except块之后,但情况并不总是这样。try和except块中使用的都是函数print()。但如果使用的是return语句,程序的执行顺序就会发生变化。具体情况是:

  1. try或except块中如果遇到return语句,程序会锁定return的值,然后跳转到finally块中。

  2. 执行finally块中的程序。

  3. 如果finally块中没有return语句,则finally块执行完毕之后仍返回原return部分,将之前锁定的值返回。

  4. 如果finally块中有return语句,则执行finally块中的return语句,整个程序执行结束。原try或except块中的程序(return语句)不再执行。

示例如下:

# exception.py
def to_int(string,base):
    try:
        return int(string,base)
    except:
        return'Error occurred!'
    finally:
        print('Finally executed.')

运行结果为:

>>> 
==================== RESTART: D:/PythonTestFile/exception.py ===================
>>> to_int('1000',2)
Finally executed.
8
>>> to_int('s',2)
Finally executed.
'Error occurred!'
>>> to_int(1000,2)
Finally executed.
'Error occurred!'

with语句- 9.3.3 -

with语句用于尽早执行清理操作的地方,即使发生了异常也是如此。例如及时关闭一个打开的文件,即在文件不再需要时,立刻关闭。其示例代码如下:

# exception.py
def closeit():
    num=1
    with open('English.txt','r') as f:
        for line in f:
            print('%02d %s' % (num,line),end='')
            num=num+1

运行结果为:

>>> 
==================== RESTART: D:\PythonTestFile\exception.py ===================
>>> closeit()
01 Cambridge Primary English Stage 1 Learner's Book
02 Cambridge Primary English Stage 1 Activity Book
03 Cambridge Primary English Stage 2 Learner's Book
04 Cambridge Primary English Stage 2 Activity Book
05 Cambridge Primary English Stage 3 Learner's Book
06 Cambridge Primary English Stage 3 Activity Book

以上代码中,当for循环结束之时,文件English.txt将被立即关闭。