python异常处理之try finally不报错的原因
作者:myself_oriented 时间:2023-05-01 00:02:40
因为有把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捕获异常堆栈信息的几种方法
来源:https://segmentfault.com/a/1190000022673705
标签:python,try,finally
0
投稿
猜你喜欢
Python3 安装PyQt5及exe打包图文教程
2021-09-24 12:43:56
配置MySQL与卸载MySQL实例操作
2024-01-19 21:55:26
Mac版Python3安装/升级的方式
2021-03-07 13:24:40
如何通过配置自动实现ValueList中hql语句的整型参数转换
2024-01-24 14:59:21
微信小程序 image组件binderror使用例子与js中的onerror区别
2024-04-19 09:42:56
layui实现下拉复选功能的例子(包括数据的回显与上传)
2024-02-24 17:37:10
python基于celery实现异步任务周期任务定时任务
2021-06-14 05:20:26
python没有gpu,如何改用cpu跑代码
2022-09-26 00:24:49
ASP checkbox复选框是否被选中的代码(结合数据库)
2011-03-06 11:21:00
Javascript连接Access数据库完整实例
2024-01-15 22:16:58
python文件拆分与重组实例
2021-10-10 18:10:25
通过优化CSS代码 减小对系统资源的占用
2010-08-03 12:33:00
python实现学生管理系统开发
2021-08-26 20:43:17
python通过微信发送邮件实现电脑关机
2022-03-20 17:58:37
pyinstaller打包多个py文件和去除cmd黑框的方法
2022-12-18 13:52:30
从品牌网站看交互设计
2009-08-18 12:39:00
Python中的Selenium异常处理
2021-08-28 04:15:23
python批量识别图片指定区域文字内容
2021-04-26 13:59:54
一个挺酷的星级投票效果
2010-08-03 12:44:00
python tkinter组件摆放方式详解
2021-09-23 01:50:23