您好,登錄后才能下訂單哦!
這篇文章主要講解了python中try finally不報錯怎么辦,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
因為有把python程序打包成exe的需求,所以,有了如下的代碼
import time class LoopOver(Exception): def __init__(self, *args, **kwargs): pass class Spider: def __init__(self): super().__init__() def run(self): raise LoopOver @property def time(self): return '總共用時:{}秒'.format(self.runtime) if __name__ == '__main__': try: spider = Spider() spider.run() print(spider.time) # 運行總時間 finally: print('死掉了') time.sleep(60 * 60)
但是遇到了一個問題
程序顯示“死掉后”并不會顯示堆棧的錯誤信息
排查后發現,程序打印“堆棧的錯誤信息”并不是異步的,“堆棧的錯誤信息”會等到finally內的代碼塊執行完畢后才會輸出
所以,把代碼塊改一下,
需要導入traceback庫來跟蹤堆棧的錯誤信息
如下所示
import time import traceback class LoopOver(Exception): def __init__(self, *args, **kwargs): pass class Spider: def __init__(self): super().__init__() def run(self): raise LoopOver @property def time(self): return '總共用時:{}秒'.format(self.runtime) if __name__ == '__main__': try: spider = Spider() spider.run() print(spider.time) # 運行總時間 finally: traceback.print_exc() print('死掉了') time.sleep(60 * 60)
這種打印方式是異步的,不知道是多線程還是協程還是啥
看完上述內容,是不是對python中try finally不報錯怎么辦有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。