1. 字符串为构造函数的参数

>> raise Exception('hyperdirve overload')
Exception                                 Traceback (most recent call last)
<ipython-input-34-b31edcf659a9> in <module>()
----> 1 raise Exception('hyperdrive overload')

Exception: hyperdrive overload

又因为 Exception 是所有异常类的基类,因此所有的异常类都有一个接受字符串的构造函数。

2. 捕获多个异常

try:
    x, y = 1, 0.
                    # x, y = 1, 'a'
    print(x/y)
exception (ZeroDivisionError, TypeError), e:
    print(e.message)

在 python 3.x 中 exception 子句又可改造为:

exception (ZeroDivisionError, TypeError) as e:
    print(e.message)

3. 捕获所有异常

try:
    ...
exception:
    print('Something wrong happened')

4. try … except … else

except… else… 与 if… else… 的执行逻辑是一致的,即 if(except) 发生 时,else 不再执行,而如果 if(except)判断不通过,将会进入 else 语句:

try:
    print('A simple test')
except:
    print('WTF? Something went wrong.')
else:
    print('Ah... Went just as planned.')

运行得如下输出:

A simple test
Ah... Went just as planned.