@(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:
无论如何,都要执行的代码
捕获到异常,就不会去执行 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:
无论如何,都要执行的代码
方法二:
try:
需要执行的操作
except (异常类1,异常2,异常3) as e:
如果发生异常,执行以下代码
else:
如果没有发生异常,执行的命令
finally:
无论如何,都要执行的代码
raise 关键字可以自主抛出异常,规则如下:
raise NameError([str])
>>> raise NameError()
Traceback (most recent call last):
File "" , line 1, in <module>
NameError
>>> raise NameError('bad name')
Traceback (most recent call last):
File "" , 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')
异常处理参考链接