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')

 

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据