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中使用SimpleParse模块进行解析的教程
Apr 11 Python
Python通过正则表达式选取callback的方法
Jul 18 Python
Python Requests 基础入门
Apr 07 Python
python实现随机梯度下降(SGD)
Mar 24 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
Python常用库大全及简要说明
Jan 17 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 Python
Python使用mitmproxy工具监控手机 下载手机小视频
Apr 18 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命令行使用方法和命令行参数说明
2014/04/08 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
js编写简易的计算器
2020/07/29 Javascript
Python 流程控制实例代码
2009/09/25 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
EJB面试题
2015/07/28 面试题
自动化专业职业生涯规划书范文
2014/01/16 职场文书
社区党员先进事迹
2014/01/22 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
工作会议通知
2015/04/15 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL