python异常处理之try finally不报错的原因


Posted in Python onMay 18, 2020

因为有把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)

但是遇到了一个问题

程序显示“死掉后”并不会显示堆栈的错误信息

python异常处理之try finally不报错的原因

排查后发现,程序打印“堆栈的错误信息”并不是异步的,“堆栈的错误信息”会等到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不报错的原因

更多追踪堆栈错误信息的,可以看这篇文章
Python捕获异常堆栈信息的几种方法

到此这篇关于python异常处理之try finally不报错的原因的文章就介绍到这了,更多相关python try finally不报错内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python打开网页和暂停实例
Sep 30 Python
PYTHON压平嵌套列表的简单实现
Jun 08 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
Python SqlAlchemy动态添加数据表字段实例解析
Feb 07 Python
Linux 修改Python命令的方法示例
Dec 03 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
python3正则模块re的使用方法详解
Feb 11 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
python如何提取英语pdf内容并翻译
Mar 03 Python
python 弧度与角度互转实例
Apr 15 Python
Pandas实现一列数据分隔为两列
May 18 #Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 #Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 #Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 #Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 #Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 #Python
django queryset相加和筛选教程
May 18 #Python
You might like
PHP树的代码,可以嵌套任意层
2006/10/09 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
简明json介绍
2008/09/28 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
Python对象体系深入分析
2014/10/28 Python
Python 中Pickle库的使用详解
2018/02/24 Python
python将图片转base64,实现前端显示
2020/01/09 Python
python标识符命名规范原理解析
2020/01/10 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
工程部经理岗位职责
2013/12/08 职场文书
新员工欢迎词
2014/01/12 职场文书
股份合作协议书
2014/09/10 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书