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获取GY-85九轴模块信息示例
Dec 05 Python
python if not in 多条件判断代码
Sep 21 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
Python zip()函数用法实例分析
Mar 17 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
Python常见字典内建函数用法示例
May 14 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
Python参数类型以及常见的坑详解
Jul 08 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
Python with语句用法原理详解
Jul 03 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
使用Python通过oBIX协议访问Niagara数据的示例
Dec 04 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中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
php取出数组单个值的方法
2018/03/12 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
Javascript 陷阱 window全局对象
2008/11/26 Javascript
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
Python3.6正式版新特性预览
2016/12/15 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
Python中if有多个条件处理方法
2020/02/26 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
交通专业个人自荐信格式
2013/09/23 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
微信搭讪开场白
2015/05/28 职场文书
消费者投诉书范文
2015/07/02 职场文书