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
Python基础之异常定义的更多相关文章
- 十九. Python基础(19)--异常
十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <............. ...
- Python基础学习----异常
''' 异常: 程序在运行的时候,Python的解释器遇到一个错误会停止运行. 并且会提供错误的信息,这就是异常 抛出异常: 程序停止执行并且提示错误信息这个动作就是抛出异常(raise Except ...
- Python基础(10) - 异常
Python 异常:程序出现了错误而在正常控制流以外采取的行为 Python中常见的异常: 1. NameError:尝试访问一个未声明的变量 >>> something Trace ...
- [Python基础]008.异常
异常 异常处理 捕获异常 抛出异常 自定义异常 一些常见的异常 异常处理 捕获异常 try/except 与C,java等语言用try/catch来捕获异常相似,Python使用try/except ...
- Python基础之告警定义与告警抑制
技术背景 在前面一篇博客中我们介绍了在python中自定义异常以及异常的捕获.这里我们要介绍另外一种形式的用户提醒:告警.我们这里就不给出一些过于官方或者技术的定义了,在实际项目中的使用场景主要有这么 ...
- python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...
- python基础知识08-类定义、属性、初始化和析构
1.类的定义 class 类 是独立存放变量(属性/方法)的一个空间. 每个实例都是一个独立的变量空间.不同实例之间的空间互相不可见. 一个实例的特征,就是属性. 定义在类中的私有属性也可以被子类继承 ...
- Python基础之异常
一.摘要 Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误.每当发生让Python不知所措的错误时,它都会创建一个异常对象.如果你编写了处理该异常的代码,程序将继续运行:如果你未对异 ...
- python基础:异常捕捉
一.异常 python在程序运行过程中,可能会出现一些错误和异常,导致程序停止运行.我们可以通过捕捉异常,并对异常进行处理,使得程序可以正常运行 异常有很多类型,可以根据类型挨个捕捉.也可统一捕获: ...
随机推荐
- Swift 5.3 All In One
Swift 5.3 All In One refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- Linux 创建/编辑/查看 文件/文件夹的命令汇总
Linux 创建/编辑/查看 文件/文件夹的命令汇总 Linux 创建文件的命令Linux,编辑文件的命令Linux 查看文件的命令,touch,vim,vi,gedit,cat,ls -a, ls ...
- koa url path & koa-router
koa url path & koa-router url path & regex koa path router "use strict"; /** * * @ ...
- egg.js 如何禁用 sensors data
egg.js 如何禁用 sensors data holy shit http://localhost:7001/product/create const json = {"id" ...
- SVG viewBox & coordinate system
SVG viewBox & coordinate system https://codepen.io/xgqfrms/pen/abOOrjp <html> <body> ...
- wireshark 获取指定进程id的数据
>netstat -aon | findstr 11380 TCP 191.127.1.7:57936 29.225.107.216:3734 ESTABLISHED 11380 过滤器: tc ...
- PAUL ADAMS ARCHITECT :阿联酋和美国富人推动英国高端房地产市场
来自2020年前三季度的数据显示,在英国高端市场上,由国际买家担保的抵押贷款交易数量最多,阿联酋目前处于领先地位.到目前为止,在2020年完成的所有交易中,有35%来自阿联酋. PAUL ADAMS ...
- 冷饭新炒:理解JWT的实现原理和基本使用
前提 这是<冷饭新炒>系列的第五篇文章. 本文会翻炒一个用以产生访问令牌的开源标准JWT,介绍JWT的规范.底层实现原理.基本使用和应用场景. JWT规范 很可惜维基百科上没有搜索到JWT ...
- Python算法_递归:汉诺塔
游戏链接:https://zhangxiaoleiv.github.io/app/TowerOfHanoi/Hanoi.html 汉诺塔游戏算法: 1 def hanoi(n,x,y,z): 2 if ...
- spring boot插件开发实战和原理
本文转载自spring boot插件开发实战和原理 实战:编写spring boot插件 为什么要编写boot插件 因为我们在开发的时候需要提供一些共同的功能,所以我们编写个共同的jar包.开发人员在 ...