python3 异常及异常处理

来源:互联网 发布:网络机房升级改造方案 编辑:程序博客网 时间:2024/06/06 05:49

异常

@(python3)

python 用 异常对象(exception object)来表示异常情况。异常对象可以被处理、捕获,避免程序终止执行。

内建异常类

python3.5 官网手册

Exception   所有异常的基类AttributeError  特征引用或者赋值失败时引发的IOError 试图打在不存在的文件(包括其他情况)IndexError  使用序列中不存在的索引KeyError    使用映射中不存在的键NameError   找不到名字(变量)SyntaxError 在代码为错误形式时引发SystemExit  系统异常退出TypeError   在内建操作或者函数应用与错误类型的对象时ValueError  正确的类型对象,但是对象使用不合适的值ZeroDivisionError   除法,第二参数为0

自定义异常

可以创建一个新的exception类来拥有自己的异常。异常应该继承自 Exception 类,或者直接继承,或者间接继承

class MyError(Exception):    pass
  • 自定义异常也可以在类里面定义方法

捕捉异常

基本形式:

try:    需要执行的操作except 异常类 as e:    如果发生异常,执行以下代码else:    如果没有发生异常,执行的命令finally:    无论如何,都要执行的代码
  • 注意 except as e 的写法,e 是一个变量,记录了异常的类,可以用 print 函数打印出来
  • except 后面的异常类,建议写 Exception,这样就一定能捕获到异常。
  • 捕获到异常,就不会去执行 else 模块

示例:

try:    name = input('Please input your name: ')    print('Hello %s' %name)    print(10/0)except Exception as e:    print('Got an error ', e)finally:    print('Game over')

捕获多个异常

方法一:

try:    需要执行的操作except 异常类 as e:    如果发生异常,执行以下代码except 异常类 as f:    如果发生异常,执行以下代码else:    如果没有发生异常,执行的命令finally:    无论如何,都要执行的代码
  • except 后面的异常类,如果无需指定,直接写 Exception 即可。
  • 如果需要明确指定异常的类,而且是多个类的情况下,可以使用多个 except 语句。

方法二:

try:    需要执行的操作except (异常类1,异常2,异常3) as e:    如果发生异常,执行以下代码else:    如果没有发生异常,执行的命令finally:    无论如何,都要执行的代码

抛出异常

raise 关键字可以自主抛出异常,规则如下:

raise NameError([str])

  • raise 后面跟异常的类,类括号里面,可以指定要抛出的异常示例,约详细越好
>>> raise NameError()Traceback (most recent call last):  File "<stdin>", line 1, in <module>NameError>>> raise NameError('bad name')Traceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: bad name

raise 如果用在 try / except 语句中,那么会直接抛出异常,并终止程序运行。不影响 finally 语句的执行。

while True:    try:        a = input('Plase input a number: ')        b = input('Plase input a number: ')        print(a/b)    except Exception as e:        print('Error happend, please do agin')        raise e    else:        print('No error happend')

异常实现循环

在循环没有异常的情况下,才会退出循环。

while True:    try:        a = input('Plase input a number: ')        b = input('Plase input a number: ')        print(a/b)    except Exception as e:        print('Error happend, please do agin')        print(e)    else:        print('No error happend')

异常处理参考链接

原创粉丝点击