python try except when abnormal, except how to return the exception message string

https://docs.python.org/3/tutorial/errors.html#handling-exceptions

https://docs.python.org/3/library/exceptions.html#ValueError

the try : 
    int ( " X " )
 the except Exception AS E:
     '' ' exception parent can catch all exceptions ' '' 
    Print (E)
 # E variable is an instance of type Exception support __str __ () method, direct printing. 
literal invalid for int () with 10 Base: ' X ' 
the try : 
    int ( " X " )
 the except Exception AS E:
     '' ' exception parent can catch all exceptions ' '' 
    Print (e.args)
# E variables attribute is .args, it is a tuple error message.

("invalid literal for int() with base 10: 'x'",)try: datetime(2017,2,30)except ValueError as e: print(e) day is out of range for monthtry: datetime(22017,2,30)except ValueError as e: print(e) year 22017 is out of rangetry: datetime(2017,22,30)except ValueError as e: print(e) month must be in 1..12e = Nonetry: datetime(2017,22,30)except ValueError as e: print(e) month must be in 1..12e
# e这个变量在异常过程结束后即被释放,再调用也无效
 Traceback (most recent call last): File "<input>", line 1, in <module>NameError: name 'e' is not defined

errarg = None
try:
    datetime(2017,22,30)
except ValueError as errarg:
    print(errarg)
    
month must be in 1..12
errarg
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'errarg' is not defined
try:
    datetime(2017,22,30)
except ValueError as errarg:
    print(errarg.args)

# ValueError.args 返回元组

('month must be in 1..12',)
message = None
try:
    datetime(2017,22,30)
except ValueError as errarg:
    print(errarg.args)
    message = errarg.args
    
('month must be in 1..12',)
message
('month must be in 1..12',)
try:
    datetime(2017,22,30)
except ValueError as errarg:
    print(errarg.args)
    message = errarg
    
('month must be in 1..12',)
message
ValueError('month must be in 1..12',)
str(message)
'month must be in 1..12'

Analysis of the abnormality information, and make corresponding processing according to the abnormality information prompt:

try:
    y = 2017
    m = 22
    d = 30
    datetime(y,m,d)
except ValueError as errarg:
    print(errarg.args)
    message = errarg
    m = re.search(u"month", str(message))
    if m:
        dt = datetime(y,1,d)
        
('month must be in 1..12',)
dt
datetime.datetime(2017, 1, 30, 0, 0)

Even then except in a recursive call:

def validatedate(y, mo, d):
    dt = None
    try:
        dt = datetime(y, mo, d)
    except ValueError as e:
        print(e.args)
        print(str(y)+str(mo)+str(d))
        message = e
        ma = re.search(u"^(year)|(month)|(day)", str(message))
        ymd = ma.groups()
        if ymd[0]:
            dt = validatedate(datetime.now().year, mo, d)
        if ymd[1]:
            dt = validatedate(y, datetime.now().month, d)
        if ymd[2]:
            dt = validatedate(y, mo, datetime.now().day)
    finally:
        return dt
    
validatedate(20199, 16, 33)
('year 20199 is out of range',)
201991633
('month must be in 1..12',)
20181633
('day is out of range for month',)
2018433
datetime.datetime(2018, 4, 20, 0, 0)

 

Guess you like

Origin www.cnblogs.com/wpcnblog/p/11356475.html