try语句按照如下方式工作:
1.首先,执行try子句(在关键字try和关键字except之间的语句)
2.如果没有异常发生,忽略except子句,try子句执行后结束。
3.如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
4.如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
异常处理
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print('cannot open', arg)
else:
print(arg, 'has', len(f.readlines()), 'lines')
f.close()
使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到的、而except又没有捕获的异常
抛出异常
Python 使用 raise 语句抛出一个指定的异常。例如:
raise NameError('HiThere')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: HiThere
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
定义清理行为
try 语句还有另外一个可选的子句finally,它定义了无论在任何情况下都会执行的清理行为。 例如:
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("division by zero!")
else:
print("result is", result)
finally:
print("executing finally clause")