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 相关文章推荐
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
Django自定义用户认证示例详解
Mar 14 Python
用Python shell简化开发
Aug 08 Python
Python  unittest单元测试框架的使用
Sep 08 Python
python将秒数转化为时间格式的实例
Sep 16 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
python编写五子棋游戏
May 25 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 $_FILES函数详解
2011/03/09 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
python查询sqlite数据表的方法
2015/05/08 Python
使用python绘制常用的图表
2016/08/27 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
python类中super() 的使用解析
2019/12/19 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
四种会话跟踪技术
2015/05/20 面试题
大学本科毕业生求职信范文
2013/12/18 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
部门年终奖分配方案
2014/05/07 职场文书
安全生产月演讲稿
2014/05/09 职场文书
如何写好竞聘报告
2019/04/03 职场文书
分析Python list操作为什么会错误
2021/11/17 Python
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js