問題
https://docs.python.org/3/tutorial/errors.html#handling-exceptions
https://docs.python.org/3/library/exceptions.html#ValueError
try: int("x") except Exception as e: '''異常的父類,可以捕獲所有的異常''' print(e) # e變量是Exception類型的實例,支持__str__()方法,可以直接打印。 invalid literal for int() with base 10: 'x' try: int("x") except Exception as e: '''異常的父類,可以捕獲所有的異常''' print(e.args)
# e變量有個屬性是.args,它是錯誤信息的元組
("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 " ", line 1, inNameError: 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 " ", line 1, inNameError: 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'
分析異常信息,并根據異常信息的提示做出相應處理:
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)
甚至可以再except中進行遞歸調用:
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',) ('month must be in 1..12',) ('day is out of range for month',) datetime.datetime(2018, 4, 20, 0, 0)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
