Python 3(8)异常处理

Python3 入门专栏

http://blog.csdn.net/column/details/19679.html


Python 异常处理


异常处理块

python 支持异常处理,使用 try 块进行异常处理,异常抛出和捕获的进制和 Java 的 try-catch-finally 块很相似,语法如
下:
 
try:
    <statement>
except ErrorType:
    <handle error statement>
finally:
    <statement>
异常处理机制如下:
  • 在 try 块抛出异常后,如果该异常类型匹配 except 的异常类型,则进入该 except 子块处理逻辑,如果 try 块没有抛出异常,则忽略 except 块,最后不管是否 try 块抛出异常,都会进入到 finally 块处理逻辑;
  • 不同于 Java 的 try-catch,Java 在捕获到异常执行完 finally 后,会强行中断程序,不会执行接下来的代码,但是 python 的 try-expect 在捕获到异常后,仍然会继续执行加下来的代码块;

以下是一个示例:
 
import sys
try:
    f = open('test.log')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
    raise
finally:
    f.close()


手动抛出异常
python 同样支持像 Java throw 语句一样手动抛出异常,使用 raise关键字,示例如下:
 
try:
    raise ValueError("This is a raised error")
except ValueError as err:
    print(format(err))
    
print("out of try code")
# 输出:
# This is a raised error
# out of try code
可以看到异常代码中,try-excpect 捕获到异常后,仍然会继续执行接下来 try-expect 块之外的代码,如果此时需要实现像 Java 类似的异常机制,在捕获到某个异常后强行终止程序执行,并在标准输出打印异常信息,可以在 except 块中加入 raise 语句,如下:
 
try:
    raise ValueError("This is a raised error")
except ValueError as err:
    print(format(err))
    raise
print("out of try code")
# 输出
'''
Traceback (most recent call last):
  File "C:/Al-assad/workplace/workplace-pycharm/pythonTest/test11.py", line 2, in <module>
    raise ValueError("This is a raised error")
ValueError: This is a raised error
This is a raised error
'''


自定义异常类型

如果需要实现自定义的异常类·,只需继承 Exception 类,并覆盖 __init__ , __str__ 等方法即可;
 
# 自定义异常类 
class MyError(Exception):
    def __init__(self, value):
        self.value = value
    def  __str__(self):
        return repr(self.value)
# 调用自定义异常类
try:
    raise MyError("this ia a raised error")
except MyError as err:
        print(err.__class__.__name__, ":", err.value)
        
# 输出:
# MyError : this ia a raised error


常见的异常类型

BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)

Exception 常规错误的基类
StandardError 所有的内建标准异常的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
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 传入无效的参数


Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值