南强小屋 Design By 杰米
因为有把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捕获异常堆栈信息的几种方法
南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米
暂无python异常处理之try finally不报错的原因的评论...