python——异常处理


异常处理

Python 程序捕捉异常使用 try/except 语句,先看个例子:

#1、被除数为 0,未捕获异常def getNum(n):        return 10 / nprint(getNum(0))#输出结果:ZeroDivisionError: division by zero
#2、捕获异常def getNum(n):    try:        return 10 / n    except IOError:        print('Error: IOError argument.')    except ZeroDivisionError:        print('Error: ZeroDivisionError argument.')print(getNum(0))'''输出结果:Error: ZeroDivisionError argument.None'''

try 语句的工作方式为:

  • 首先,执行 try 子句 (在 try 和 except 关键字之间的部分);

  • 如果没有异常发生, except 子句 在 try 语句执行完毕后就被忽略了;

  • 如果在 try 子句执行过程中发生了异常,那么该子句其余的部分就会被忽略;

  • 如果异常匹配于 except 关键字后面指定的异常类型,就执行对应的except子句,然后继续执行 try 语句之后的代码;

  • 如果发生了一个异常,在 except 子句中没有与之匹配的分支,它就会传递到上一级 try 语句中;

  • 如果最终仍找不到对应的处理语句,它就成为一个 未处理异常,终止程序运行,显示提示信息。

try/except 语句还可以带有一个 else、finally子句,示例如下:

def getNum(n):    try:        print('try --> ',10 / n)    except ZeroDivisionError:        print('except --> Error: ZeroDivisionError argument.')    else:        print('else -->')    finally:        print('finally -->')
'''1、调用:getNum(0)输出结果:except --> Error: ZeroDivisionError argument.finally -->
2、调用:getNum(1)输出结果:try -->  10.0else -->finally -->'''

其中,else 子句只能出现在所有 except 子句之后,只有在没有出现异常时执行;finally 子句放在最后,无论是否出现异常都会执行。

抛出异常

使用 raise 语句允许强制抛出一个指定的异常,要抛出的异常由 raise 的唯一参数标识,它必需是一个异常实例或异常类(继承自 Exception 的类),如

raise NameError('HiThere')

自定义异常

正常来说,Python 提供的异常类型已经满足我们的使用了,但是有时候我们有定制性的需求,我们可以自定义异常类,继承自 Error 或 Exception 类就可以了,看个例子:

#自定义异常类 MyExc
class MyExc(Exception):  #继承Exception类
    def __init__(self, value):
        self.value = value
    def __str__(self):
        if self.value == 0:
            return '被除数不能为0'
#自定义方法
def getNum(n):
    try:
        if n == 0:
            exc = MyExc(n)
            print(exc)
        else:
            print(10 / n)
    except:
        pass
'''
1、调用 getNum(1),输出结果为:
10.0

2、调用 getNum(0),输出结果为:
被除数不能为0
'''

在这个自定义的异常例子中,当参数 n 不为 0 时,则正常,当 n 等于 0,则抛出异常,自定义异常在实际应用中很少用到,了解即可。

你可能感兴趣的:(python,开发语言)