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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。