Python中的异常处理
本文作者:孟孔,中南财经政法大学金融学院
本文编辑:胡艺粼
技术总编:孙一博
Stata and Python 数据分析
由李春涛教授和团队成员司海涛、薛原编写的《Stata正则表达式及其在财务数据中的应用》终于和大家见面啦!爬虫俱乐部特此为大家准备了100本,即日起购买爬虫俱乐部课程,可赠送本书一本,先到先得!
购书链接:
爬虫俱乐部Stata基础课程、Stata进阶课程和Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
异常是程序执行过程中出现的错误,解释器无法继续执行了,出现了一些错误的提示,逻辑错误、用户输入不合法等情况都会引发异常,我们可以采取适当的方法,利用异常处理机制及时捕获与处理异常,使得写出来的程序更加安全与稳定。
基于BaseException类的异常可以分为SystemExit、KeyboardInterrupt、GeneratorExit、Exception。其中Exception常规错误基类衍生18种子类异常,子类异常下面仍有众多类型异常,属于重点关照的父类异常,而其他三类无子类异常。
BaseException 所有异常的基类
+-- SystemExit 解释器请求退出
+-- KeyboardInterrupt 用户中断执行(通常是输入^C)
+-- GeneratorExit 生成器(generator)发生异常来通知退出
+-- Exception 常规错误的基类
+-- StopIteration 迭代器没有更多值
+-- StopAsyncIteration 必须通过异步迭代器对象的__anext__()方法引发以停止迭代
+-- ArithmeticError 所有数值计算错误的基类
+-- AssertionError 断言语句失败
+-- AttributeError 对象没有这个属性
+-- ImportError 导入失败
..........................................
以上仅列出部分异常类型,全部异常类型可参考博客:Python内置异常类型全面汇总(https://www.jb51.net/article/187518.htm)try:
可能发⽣错误的代码
except A:
如果出现异常A执⾏的代码
except B:
如果出现异常B执⾏的代码
except:
如果出现异常A、B以外的异常执⾏的代码
else:
没有异常的时候执⾏的代码
finally:
⽆论是否异常都要执⾏的代码
通过计算除式来简单了解一下try/except的用法。try:
a = int(input("输入被除数:"))
b = int(input("输入除数:"))
c = a / b
print("除式计算结果为:", c )
except (ValueError):
print("存在异常,异常类型为传入无效的参数")
else:
print("无其他异常")
finally:
print("end")
当我们输入b分母为非零的正数时,程序正常结束;而输入b=a时,则会报错,可以看到finally无论是否发生异常均执行。try:
可能发⽣错误的代码
except 异常类型:
如果捕获到该异常类型执行的代码
如果尝试执行的代码的异常类型和要捕获的异常类型不⼀致,则无法捕获异常。一般try下方只放一行尝试执行的代码。对基本格式进行拓展。阐述捕获多个和所有关于异常的描述。捕获多个异常的描述信息
try:
可能发⽣错误的代码
except (异常A, 异常B) as result:
print(result)
捕获所有异常描述信息
try:
可能发⽣错误的代码
except Exception as result:
print(result)
我们仍接着上面的除式进行案例讲解,输入分母为0和a,直接输出关于所发生异常的描述。
try:
a = int(input("被除数:"))
b = int(input("除数:"))
c = a / b
print("除式计算结果为:", c)
except (ZeroDivisionError,ValueError) as result:
print(result)
finally:
print("end")
passward = str(12345)
if len(passward) != 6:
raise ValueError("传入无效的参数")
当passward的长度为5,进入if判断语句,长度不为6则抛出异常。
基本语法格式 assert 表达式 [, 参数]
assert True
assert False
# ⾃定义异常类
class 异常类名(Exception):
def __init__(self,参):
self.参 = 参
# 设置抛出异常的描述信息
def __str__(self):
return ...
#设置程序
def 程序名():
# 抛出异常
raise 异常类名()
# 捕获异常
except Exception as result...
#执行程序
程序名()
我们通过一个输入银行卡密码的案例,实操理解自定义异常。当密码长度不足6位时,则报异常,即抛出自定义异常,捕获该异常。# 定义异常,设置魔法方法和异常描述
class PasswardInputError(Exception):
def __init__(self,length,local_length):
self.length = length #用户输入的密码
self.local_length = local_length #要求的长度
# 异常描述
def __str__(self):
return f'您输入的密码长度是:{self.length},密码长度不符,请重新输入!!'
def ProcessStart():
while True: #设置循环 直到输入成功
try:
passward = input("客官,请输入您的六位数密码:")
if len(passward) != 6:
raise PasswardInputError(len(passward), 6) #抛出异常
if len(passward) == 6:
print(f'客官,输入成功!请牢记您的密码{passward}')
break
except Exception as result:
print(result)
# 程序启动
ProcessStart()
通过自定义异常的方式,我们将其return为您输入的密码长度是:{self.length},密码长度不符,请重新输入!!,直观易懂。
关于Python异常处理的讲解结束,欢迎大家评论区留言,共同讨论更加高效的异常处理方法,让代码丝滑起来skr~skr~skr~
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐 cntrade的隐藏功能:获取每年年末上市公司数量
Python交互式数据可视化——酷炫的Altair库 hk系列命令(3)—— hktrade hk系列命令(2)—— hkar hk系列命令(1)—— hkstock 超好用的字符串方法 基于Python的假设检验实现 Stata与MySQL交互--基础操作 Jupyter Notebook中的魔术命令《Stata正则表达式》由中国金融出版社出版发行 匿名函数lambda到底怎么用? Stata绘图系列—NBER Working paper仿图 Camelot:从PDF中提取表格数据 Stata之计算财务指标——融资约束 列表生成式|让你的代码更简洁 Stata绘图系列——玩转绘图通用选项之坐标轴 玩转地图的好帮手--pyecharts 爬虫俱乐部又又又输送了一位研究助理!!!【数据分析】一文教你玩转DataFrame 关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。