python异常处理
来源:互联网 发布:阜阳市工商局网络监管 编辑:程序博客网 时间:2024/06/02 04:14
python异常处理
1. python的异常:
python用异常对象(exeption object)来表示异常。如果异常对象并未被捕捉后,程序会终止执行并抛出异常(使用Traceback显示)。
python在exceptions中定义了大量的异常类型,在使用时import导入即可。大家可以使用dir函数查看exceptions中的类型,类型有很多。通常,我们最常用的两个基类是:BaseException(所有异常的基类),Exception(通用的异常类)
2. 异常的抛出机制:
(1)如果在运行时发生异常,解释器会查找相应的处理语句(成为handler);
(2)若是在当前的函数里没有找到,它会将异常传递给上层的调用函数,看看是否有处理异常的机制;
(3)如果在最外层(全局main)还是没有找到的话,解释器就会退出,同时打印出traceback以便让用户找到错误产生的原因。
3. try捕捉异常:
对于异常的处理,可以使用try,except,else,finally进行捕捉。try语句会在当前程序的上下文中做标记,当异常出现时,就可以回到这里。
try: statement1 (正常业务代码)except Exception_class, msg: statement2 (捕获特定异常,或所有异常。异常处理逻辑)else: statement3 (异常未捕捉到的)finally: statement4 (不管异常有没有发生,都执行部署)
(1)except后跟了两个变量,前者是异常类型,后者是异常对象,包含了异常信息。在新版本中的写作,经常写成:except Exception_class as ex(建议写为这种)
(2)异常发生时,如果except没有捕捉到异常,那么会进入else继续进行处理;
(3)在执行try语句时,可以尝试按ctrl+c触发异常退出,此时,finally语句依然可以被执行到。其实,finally中的语句,不论有没有异常,都会执行到。
3. raise抛出异常:
在实际语句中,可以使用raise命令主动抛出对应的异常。简单的命令格式为:
raise Exception(args [, traceback])
当然,也可以抛出自定义的异常
4. 用户自定义异常
通过继承异常基类而创建一个新的异常类,在新的异常里面可以自定义异常信息,可以更方便、准确的捕捉到错误,增加程序可读性。
比如,实际进行异常处理写作时,可以按照如下方式定义:
1)编辑message.py,定义信息显示的标准宏定义;
__author__ = 'acer'#-*- coding: utf-8 -*-#!/usr/bin/pythonNOT_FOUND_ERROR = "Not Found Resource!"
2)编辑exceptions.py,定义各种新的异常类(使用message.py信息):
from common.messages import *class APIException(Exception): def __init__(self, status="", error_code="", message=NOT_FOUND_ERROR): Exception.__init__(self) self.message = message self.status = status self.error_code = error_code pass def __str__(self): return "An Error Occured: Status: %s; Error_code: %s; Msg: %s" %\ (self.status, self.error_code, self.message)
3)主动抛出对应的异常
from common import exceptionsdef main(): a = "abc" try: b = int(a) except Exception as ex: raise exceptions.APIException(status="404", error_code="wrong")if __name__ == "__main__": main()
4)执行结果:
Traceback (most recent call last): File "E:/03_编程/01_程序脚本/tools/test/TestException.py", line 15, in <module> main() File "E:/03_编程/01_程序脚本/tools/test/TestException.py", line 12, in main raise exceptions.APIException(status="404", error_code="wrong")common.exceptions.APIException: An Error Occured: Status: 404; Error_code: wrong; Msg: Not Found Resource!
可以看出,新增异常类的信息正常的抛出了。
5. 文件打开异常与with命令
一般,我们在打开文件的时候,简单流程如下:
fd = open(“test.txt”, “r”)contents = fd.readlines()......fd.close()
但是如果我们在处理过程,不小心持有了文件的句柄,导致文件未被正常的释放,可能导致其它命令无法正常的访问到这里。
于是就有了:
try: fd = open(“test.txt”, “r”) contents = fd.readlines() ...处理 fd.close()except: fd.close()
但是python的with给我们提供了很好的解决方案,这就是:
with open(“test.txt”, “r”) as fd: contents = fd.readlines()
这样,即使没有正常的处理,也能很好的释放掉文件句柄。
有了with这个强大的语法,我们就不限于打开文件了,针对更常见的方式,可以去封装,有了另外一种更加合理便利的写法:
def cdir(path): pre = os.getcwd() os.chdir(path)try: yieldfinally: os.chdir(pre)with cdir(“/home”): do something……
with为我们提供了极大的便利,可以方便的让我们进行编程及实现。
- Python异常和异常处理
- python异常处理
- Python异常处理
- python 异常处理
- python异常处理
- python如何处理异常
- python之异常处理
- python异常处理
- python异常处理
- Python异常处理
- python异常处理
- python的异常处理
- python的异常处理
- python 异常处理
- python 异常处理
- python 异常处理
- Python异常处理
- Python异常处理
- How to build MTFMapper
- Visual Studio Code 使用心得
- NodeJS运行时抛出: Error: listen EADDRINUSE :::3000
- markdown语法技巧2
- sed 工具基本使用方法
- python异常处理
- ApplicationContext 接口容器和BeanFactory 接口容器
- C++ 视频课笔记3
- mybatis数据库查询
- JDBC三种编译
- 2017.7.26学习总结
- python中的继承
- android值制作简易的闹钟和通知栏信息
- C++ 视频课笔记4