python try except返回异常的信息字符串代码实例
问题
https://docs.python.org/3/tutorial/errors.html#handling-exceptions
https://docs.python.org/3/library/exceptions.html#ValueError
try: int("x") exceptExceptionase: '''异常的父类,可以捕获所有的异常''' print(e) #e变量是Exception类型的实例,支持__str__()方法,可以直接打印。 invalidliteralforint()withbase10:'x' try: int("x") exceptExceptionase: '''异常的父类,可以捕获所有的异常''' print(e.args)
#e变量有个属性是.args,它是错误信息的元组
("invalidliteralforint()withbase10:'x'",)try:datetime(2017,2,30)exceptValueErrorase:print(e)dayisoutofrangeformonthtry:datetime(22017,2,30)exceptValueErrorase:print(e)year22017isoutofrangetry:datetime(2017,22,30)exceptValueErrorase:print(e)monthmustbein1..12e=Nonetry:datetime(2017,22,30)exceptValueErrorase:print(e)monthmustbein1..12e #e这个变量在异常过程结束后即被释放,再调用也无效 Traceback(mostrecentcalllast):File"",line1,inNameError:name'e'isnotdefined
errarg=None try: datetime(2017,22,30) exceptValueErroraserrarg: print(errarg) monthmustbein1..12 errarg Traceback(mostrecentcalllast): File"",line1,inNameError:name'errarg'isnotdefined try: datetime(2017,22,30) exceptValueErroraserrarg: print(errarg.args) #ValueError.args返回元组 ('monthmustbein1..12',) message=None try: datetime(2017,22,30) exceptValueErroraserrarg: print(errarg.args) message=errarg.args ('monthmustbein1..12',) message ('monthmustbein1..12',) try: datetime(2017,22,30) exceptValueErroraserrarg: print(errarg.args) message=errarg ('monthmustbein1..12',) message ValueError('monthmustbein1..12',) str(message) 'monthmustbein1..12'
分析异常信息,并根据异常信息的提示做出相应处理:
try: y=2017 m=22 d=30 datetime(y,m,d) exceptValueErroraserrarg: print(errarg.args) message=errarg m=re.search(u"month",str(message)) ifm: dt=datetime(y,1,d) ('monthmustbein1..12',) dt datetime.datetime(2017,1,30,0,0)
甚至可以再except中进行递归调用:
defvalidatedate(y,mo,d): dt=None try: dt=datetime(y,mo,d) exceptValueErrorase: print(e.args) print(str(y)+str(mo)+str(d)) message=e ma=re.search(u"^(year)|(month)|(day)",str(message)) ymd=ma.groups() ifymd[0]: dt=validatedate(datetime.now().year,mo,d) ifymd[1]: dt=validatedate(y,datetime.now().month,d) ifymd[2]: dt=validatedate(y,mo,datetime.now().day) finally: returndt validatedate(20199,16,33) ('year20199isoutofrange',) ('monthmustbein1..12',) ('dayisoutofrangeformonth',) datetime.datetime(2018,4,20,0,0)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。