流程控制(Control Flow)

try 语句

try 语句可以后跟 except, except...else, finally, except...finally, except...else...finally

对于 try...except...finally 和 try...except...else...finally 相当于是

try:
        try:
                ...
        except:
                ...
        else:
                ...
finally:
        ...

这是一个知识点(PKP+1)

try ... except...(else...) 语句(PKP+1)

只有当没有任何异常发生时,才会走到 else 子句中

如果有异常发生,但except 没有捕获,会发生一个隐含的 raise ,所以

try:
        ...
except A:
        ...
except B:
        ...
else:
        ...

相当于是

try:
        ...
except A:
        ...
except B:
        ...
except:
        raise
else:
        ...

如果不知道是什么异常,用 Exception

try:
    kk
except Exception, e:
    print type(e), e

输出

<type 'exceptions.NameError'> global name 'kk' is not defined

可以 except NameError 也可以 except NameError, e 也可以 except NameError as e 当然也可以不带参数

一个 try 后可以跟多个 except 测试不同的条件。

每个 except 中还可以跟多个测试条件如 except (RuntimeError, TypeError, NameError):

try ... finally... 语句(PKP+1)

for 语句(PKP+1)

for...else... 语句(PKP+1)

注意,看到 for ... else 语句,初学者容易理解为,当 for 循环一次也不满足时,走 else ,这是不对的。 只有当 for 循环中遇到 break 时,才不走 else 。