Python基础之异常定义
技术背景
在各类python的项目中,总会涉及到项目自身相关的一些约束条件。这些约束条件体现在,当用户输入的参数或者文件不符合项目要求时,就拒绝这个参数的输入并且播报出来,提醒用户自行修改,而这一过程就是python的异常定义与捕获所提供的功能。python的异常捕获与定义,是一个比较基础的话题,在其他的编程语言中也会有涉及到类似的操作。
异常定义实例
这里我们直接给出一个定义异常的实例:
# exception.py
class NewError(BaseException):
def __init__(self, args):
self.args = list(args)
print ('\033[1;31m NewError Raised: \033[0m')
if __name__ == '__main__':
try:
raise NewError("Test Error")
except NewError as e:
print (e.args)
在这个实例中,我们定义了一个新的异常NewError
,这个类继承自BaseException
,是所有异常的基类。关于更多的异常类,可以参考本文的参考链接2,其中有比较详细的介绍。回到上面的这个案例,我们定义了一个有入参的异常类,也就是说可以跟用户的输入参数进行关联,以提醒是哪一个用户输入的参数导致了这个异常的出现。在这个异常中我们可以打印一些基础信息,这里我们简单的用NewError Raised
来描述,同时我们给这个print输出加上了红色,大致效果如下:
这里的31
就是定义的红色的意思,关于其他颜色的定义可以参考如下的表格(表格来源于参考链接1):
打印完整异常信息
上述的实例中由于捕获了异常信息,其实同时也对这个异常进行了抑制,如果不进行抑制就会弹出Traceback之类的信息并且中断程序的运行。这里我们参考博客中所演示的一个方案,采用traceback类来播报异常信息,但不终止程序的运行。针对上述代码修改后如下所示:
# exception.py
class NewError(BaseException):
def __init__(self, args):
self.args = list(args)
if __name__ == '__main__':
try:
raise NewError("Test Error")
except NewError as e:
import traceback
traceback.print_exc()
在修改的实例中我们去掉了异常类内部的打印以及原来在except下的打印,采用traceback来包含所有的异常信息,输出如下:
[dechin-20n2s01200 exception]# python3 exception.py
Traceback (most recent call last):
File "exception.py", line 9, in <module>
raise NewError("Test Error")
NewError: ('T', 'e', 's', 't', ' ', 'E', 'r', 'r', 'o', 'r')
当然,这里我们需要再次提醒的是,虽然看起来异常信息播报与程序出现异常一致,但是由于这里先用try的方法进行了捕获和抑制,因此程序后面的部分还是会继续执行的。
总结概要
本文中介绍了常规python中的异常的定义方法,可以在自己的python项目中定制化的实现一些异常类。在定制化的类中我们可以给打印信息加上一些醒目的颜色,用于提醒用户以促进问题的修改。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/exception.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
参考链接
- https://blog.csdn.net/wls666/article/details/100867234
- https://www.runoob.com/python/python-exceptions.html
最新文章
- runtime(面试)
- MVC 自定义IModelBinder实现json参数转Dictionary<;string, string>;
- Qt学习笔记:Qt中使用Lua
- linux脚本编程技术---8
- $parse , $interpolate ,$complie , $destroy
- C语言星号的秘密
- String的使用
- PHP分页类,支持自定义样式,中间5页
- 修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式
- SSM-Spring-03:Spring中AOP的初窥和入门小案例
- 错误笔记 对象为null时调用改对象的方法会报错
- 【Monkey】Monkey获取包名的方式
- Mudo C++网络库第五章学习笔记
- Code Generation =>; Table ->; Class for DataGridView use
- 基于虹软的Android的人脸识别SDK使用测试
- Keil stm32 printf到Debug窗口
- MySQL无损复制(转)
- tocat 域名绑定
- Git的小总结
- day10学习笔记整理
热门文章
- js location API All In One
- Win/Mac 键位映射 &; 在 Mac 上更改“键盘”偏好设置
- node.js &; create file
- MacBook Pro 2019 13 inch &; screen blink
- nasm astrcspn函数 x86
- PAUL ADAMS ARCHITECT:澳洲房贷最低利率来袭
- Python安装教程
- 1047 Student List for Course ——PAT甲级真题
- JAVA基础(零)—— 踩坑与错误(常更)
- 第39天学习打卡(多线程 Thread Runnable 初始并发问题 Callable )