异常
- 在语法逻辑正确的前提下,出现的问题
- 在python里面,异常是一个类,可以处理和使用
异常分类
- BaseException 所有异常的基类
- SystemExit 解释器请求退出
- KeyboardInterrupt 用户中断执行(通常是输入^C)
- Exception 常规错误的基类
- StopIteration 迭代器没有更多的值
- GeneratorExit 生成器(generator)发生异常来通知退出
- StandardError 所有的内建标准异常的基类
- ArithmeticError 所有数值计算错误的基类
- FloatingPointError 浮点计算错误
- OverflowError 数值运算超出最大限制
- ZeroDivisionError 除(或取模)零 (所有数据类型)
- AssertionError 断言语句失败
- AttributeError 对象没有这个属性
- EOFError 没有内建输入,到达EOF 标记
- EnvironmentError 操作系统错误的基类
- IOError 输入/输出操作失败
- OSError 操作系统错误
- WindowsError 系统调用失败
- ImportError 导入模块/对象失败
- LookupError 无效数据查询的基类
- IndexError 序列中没有此索引(index)
- KeyError 映射中没有这个键
- MemoryError 内存溢出错误(对于Python 解释器不是致命的)
- NameError 未声明/初始化对象 (没有属性)
- UnboundLocalError 访问未初始化的本地变量
- ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
- RuntimeError 一般的运行时错误
- NotImplementedError 尚未实现的方法
- SyntaxError Python 语法错误
- IndentationError 缩进错误
- TabError Tab 和空格混用
- SystemError 一般的解释器系统错误
- TypeError 对类型无效的操作
- ValueError 传入无效的参数
- UnicodeError Unicode 相关的错误
- UnicodeDecodeError Unicode 解码时的错误
- UnicodeEncodeError Unicode 编码时错误
- UnicodeTranslateError Unicode 转换时错误
- Warning 警告的基类
- DeprecationWarning 关于被弃用的特征的警告
- FutureWarning 关于构造将来语义会有改变的警告
- OverflowWarning 旧的关于自动提升为长整型(long)的警告
- PendingDeprecationWarning 关于特性将会被废弃的警告
- RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
- SyntaxWarning 可疑的语法的警告
- UserWarning 用户代码生成的警告
异常处理
-
保证程序在最坏的情况下,问题得到妥善的处理
-
异常处理模块的语法
try: 容易产生错误的代码 如果出现异常,将异常从当前代码块扔出去,尝试异常的解决 except 异常类型1: 解决方案1 except 异常类型2 as e: 解决方案2 except (异常类型1,异常类型2,....): 针对多个异常采取相同的解决方案 except: 针对所有异常采取同样的解决方案 else: 如果没有出现异常,将执行此代码 finally: 不管有没有异常,都将执行此代码 - 除了except(最少一个)以外,else 和finally都是可选的
# 异常捕获
try:
num = int(input("请输入一个数:"))
rst = 100/num
print("计算结果是{0}".format(rst))
#越具体的错误 越往前放
except ZeroDivisionError as e:
print("除数不能为0")
print(e)
except(NameError,AttributeError):
print("要么名字有问题,要么属性有问题,你检查下呗")
#所有的异常都继承自Exception 如果上面的异常捕获没有捕获到的话,这里将会进行捕获
except Exception as e:
print("反正是出错了,但是我也不知道是什么错")
else:
print("你的代码正确了!没有错误哦!")
finally:
print("代码结束了!game over")
请输入一个数:1
计算结果是100.0
你的代码正确了!没有错误哦!
代码结束了!game over
手动引发异常
- 当某些时候,用户希望自己引发一个异常的时候可以使用 raise 关键字来引发异常
- 语法
- raise ExceptionType
- 如 raise NameError
- raise ExceptionType
自定义异常
- 自定义异常必须是系统异常的子类
- 只要是raise异常,那么推荐自定义异常
- 自定义异常一般包括:
- 自定义发生异常的异常代码
- 自定义发生异常的问题提示
- 自定义发生异常的行数
- 最终的目的是,一旦发生异常,方便程序员快速定位错误现场
#自定义异常
class TestError(ValueError):
pass
try:
print("my name is tom")
raise TestError
# 如果这里不对testError进行捕获的话,那么valueError将对错误进行捕获,因为testerror的父类是valueError
except TestError as e:
print("testError")
except ValueError as e:
print("value error")
my name is tom
testError
网友评论