python 异常处理模块_Python Exceptions 异常处理全过程以及异常模块详细解析

1.异常的定义

程序运行时检测到错误而导致解释器无法继续执行,反而出现一些错误的提示

2.捕捉异常全过程(重点)

try:

print("可能产生异常的代码")

except Exception as e:

print("处理异常错误的代码")

else:

print("没有捕获到异常")

finally:

print("无论异常是否产生都要执行")

总结:

try:

处理可能产生异常的代码

except

处理异常错误的代码

如果只捕捉一个异常,一般写成except Exception as e:

捕获多个异常时,except (IOError,NameError) as e:其中元祖中的异常可以根据代码需求填写.

当捕获多个异常时,可以把要捕获的异常的名字,放到except 后,并使用元组的方式仅进行存储

else

没有捕获到异常时执行

finally

无论异常是否产生都要执行部分,比如文件关闭,释放锁,把数据库连接返还给连接池等

3.异常的传递

异常的传递主要有try嵌套方式和函数嵌套调用2种方式:

如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递

如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理

4.自定义异常以及抛出异常raise

class MyError(Exception):

# 自定义异常,必须继承 Exception

def __init__(self, age):

self.age = age

def __str__(self):

# __str__返回的字符串就是异常的描述信息

return '年龄不能小于 0, 您输入的是 %d' % self.age

age = int(input('请输入年龄:'))

try:

if age < 0:

raise MyError(age) # 抛出异常,raise 异常名()

except MyError as exp:

print('捕捉到异常,exp=', exp)

5.异常模块

Exceptions 模块提供了标准异常的层次结构. Python启动的时候会自动导入 这个模块, 并且将它加入到__builtin__模块中. 也就是说, 一般不需要手动导入这个模块.

Exception 是所有异常的基类. 强烈建议(但不是必须)自定义的异常异 常也继承这个类.

SystemExit(Exception) 由 sys.exit 函数引发. 如果它在最顶层没有被 try-except 语句捕获, 那么解释器将直接关闭而不会显示任何跟踪 返回信息.

StandardError(Exception) 是所有内建异常的基类(除 SystemExit 外).

KeyboardInterrupt(StandardError) 在用户按下 Control-C(或其他打 断按键)后 被引发. 如果它可能会在你使用 “捕获所有” 的 try-except 语句时导致奇怪的问题.

ImportError(StandardError) 在 Python 导入模块失败时被引发.

EnvironmentError 作为所有解释器环境引发异常的基类. (也就是说, 这些异常一般不是由于程序 bug 引起).

IOError(EnvironmentError) 用于标记 I/O 相关错误.

OSError(EnvironmentError) 用于标记 os 模块引起的错误.

WindowsError(OSError) 用于标记 os 模块中 Windows 相关错误.

NameError(StandardError) 在 Python 查找全局或局部名称失败时被引 发.

UnboundLocalError(NameError) , 当一个局部变量还没有赋值就被使用 时, 会引发这个异常. 这个异常只有在 2.0 及之后的版本有; 早期版本 只会引发一个普通的 NameError .

AttributeError(StandardError) , 当 Python 寻找(或赋值)给一个实 例属性, 方法, 模块功能或其它有效的命名失败时, 会引发这个异常.

SyntaxError(StandardError) , 当解释器在编译时遇到语法错误, 这个异常就被引发.

IndentationError(SyntaxError) 在遇到非法的缩进时被引发. 该异常只用于 2.0 及以后版本, 之前版本会引发一个 SyntaxError 异常.

TabError(IndentationError) , 当使用 -tt 选项检 查不一致缩进时有可能被引发. 该异常只用于 2.0 及以后版本, 之前版 本会引发一个SyntaxError 异常.

TypeError(StandardError) , 当给定类型的对象不支持一个操作时被引 发.

AssertionError(StandardError) 在 assert 语句失败时被引发(即表达 式为 false 时).

LookupError(StandardError) 作为序列或字典没有包含给定索引或键时所引发异常的基类.

IndexError(LookupError) , 当序列对象使用给定索引数索引失败时(不存在索引对应对象)引发该异常.

KeyError(LookupError) 当字典对象使用给定索引索引失败时(不存在索 引对应对象)引发该异常.

ArithmeticError(StandardError) 作为数学计算相关异常的基类.

OverflowError(ArithmeticError) 在操作溢出时被引发(例如当一个整 数太大, 导致不能符合给定类型).

ZeroDivisionError(ArithmeticError) , 当你尝试用 0 除某个数时被引发.

FloatingPointError(ArithmeticError) , 当浮点数操作失败时被引发.

ValueError(StandardError) , 当一个参数类型正确但值不合法时被引 发.

UnicodeError(ValueError) , Unicode 字符串类型相 关异常. 只使用在 2.0 及以后版本.

RuntimeError(StandardError) , 当出现运行时问题时引发, 包括在限制模式下尝试访问外部内容, 未知的硬件问题等等.

NotImplementedError(RuntimeError) , 用于标记未实现的函数, 或无效的方法.

SystemError(StandardError) , 解释器内部错误. 该异常值会包含更多的细节 (经常会是一些深层次的东西, 比如 “eval_code2: NULL globals” ) .

MemoryError(StandardError) , 当解释器耗尽内存时会引发该异常. 注 意只有在底层内存分配抱怨时这个异常才会发生; 如果是在你的旧机器 上, 这个异常发生之前系统会陷入混乱的内存交换中.

你可以创建自己的异常类(参考第四点). 只需要继承内建的 Exception 类(或者它的任意一个合适的子类)即可, 有需要时可以再重载它的__str__方法 ,一般常见的异常类有:

Exception

KeyboardInterrupt

ImportError

NameError

AttributeError

SyntaxError

TypeError

IndexError

KeyError

ValueError

以上内容仅是代表个人总结 若有错误之处,还请批评指正,欢迎大家一起学习!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值