Python

Python 知识量:10 - 41 - 150

9.2 处理异常><

捕获异常- 9.2.1 -

当异常引发后,通常有两种处理方式:

  • 忽略异常。让程序显示异常的信息,这种处理方式一般用于程序的调试。

  • 捕获异常。对于正式运行的程序,向用户展示异常的详细信息不是好主意,应当对异常进行捕获处理,并告诉用户发生了什么和该怎么做。

Python通过try/except块来实现异常的捕获和处理。下面设计一个获取整数的程序,程序将不停循环,直到获得一个正确的整数输入信息:

# exception.py
def get_int():
    while True:
        try:
            n=int(input('Give me an integer value:'))
            return n
        except ValueError:
            print('It is not an integer value!')

运行结果为:

>>> 
==================== RESTART: D:/PythonTestFile/exception.py ===================
>>> get_int()
Give me an integer value:d
It is not an integer value!
Give me an integer value:6.36
It is not an integer value!
Give me an integer value:8
8

以上面的代码为例,异常捕获的原理是:try块中的程序处于异常监控中。如果发生异常,程序将跳过未执行的部分,直接跳转到except块;如果没有发生异常,程序将在try块中执行完毕,except块中的内容将被忽略。

许多情况下,函数可能引发的异常类型是不确定的,有些函数可以引发不止一种类型的异常。要了解这些信息可以查看函数的有关文档,或者最好直接试一下。

捕获多种异常- 9.2.2 -

可以使用try/except块处理多种异常的情况,这在编程中比较常见。实现的方法就是在except子句中指定多种异常。下面是一个示例:

# exception.py
def to_int(string,base):
    try:
        return int(string,base)
    except ValueError:
        return'Value error!'
    except TypeError:
        return'Type error!'

运行结果为:

>>> 
==================== RESTART: D:/PythonTestFile/exception.py ===================
>>> to_int('1000',2)
8
>>> to_int('s',2)
'Value error!'
>>> to_int(1000,2)
'Type error!'

程序根据引发的异常类型,执行except块对应的处理代码。

捕获所有异常- 9.2.3 -

如果不在except子句中区分异常类型,那么它将会捕获所有异常,这意味着只需要关注是否发生异常即可。例如下面的示例:

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

运行结果为:

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