python try except返回異常的信息字符串代碼實例
更新時間:2019年08月15日 17:08:59 作者:貧民窟里的程序高手
這篇文章主要介紹了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") 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這個變量在異常過程結束后即被釋放,再調(diào)用也無效 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'
分析異常信息,并根據(jù)異常信息的提示做出相應處理:
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中進行遞歸調(diào)用:
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)
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python GUI編程學習筆記之tkinter事件綁定操作詳解
這篇文章主要介紹了Python GUI編程學習筆記之tkinter事件綁定操作,結合實例形式分析了Python GUI編程tkinter事件綁定常見操作技巧與使用注意事項,需要的朋友可以參考下2020-03-03python爬蟲selenium和phantomJs使用方法解析
這篇文章主要介紹了python爬蟲selenium和phantomJs使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08Python的3種運行方式:命令行窗口、Python解釋器、IDLE的實現(xiàn)
這篇文章主要介紹了Python的3種運行方式:命令行窗口、Python解釋器、IDLE的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10