异常处理
引发异常
在代码的任何地方都可使用raise语句故意引发异常:
>>> raise IOError('This is a test!')
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module> raise IOError('This is a test!')
IOError: This is a test!
捕获异常
ex:
def get_age():
while Ture:
try:
n = int(input('How old are you? '))
return n
except ValueError:
print('Please enter an integer value.')
处理多种异常:
def convert_to_int2(s, base):
try:
return int(s, base)
except ValueError:
return 'value error'
except TypeError:
return 'type error'
捕获所有异常:
def convert_to_int3(s, base):
try:
return int(s, base)
except:
return 'error'
with 语句
为了确保即便发生异常,也将尽早执行清理操作。
num = 1
f = open(fname)
for line in f:
print('%04d %s' % (num, line), end = ' ')
num = num + 1
这里不知道文件对象f将在何时关闭。f通常在for循环结束后关闭,但不知道准确的时间。
为确保不再需要的文件尽早关闭,可使用with语句:
num = 1
with open(fname, 'r') as f:
for line in f:
print('%04d %s' % (num, line), end = ' ')
num = num + 1
使用with语句时,将在for循环结束后立即执行文件对象清理操作。