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实现无证书加密解密实例
Oct 27 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
对于Python中RawString的理解介绍
Jul 07 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
Python+Django搭建自己的blog网站
Mar 13 Python
Django中的文件的上传的几种方式
Jul 23 Python
Python 中的lambda函数介绍
Oct 10 Python
python3转换code128条形码的方法
Apr 17 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
python爬取代理ip的示例
Dec 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
pygame实现弹力球及其变速效果
2017/07/03 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
实例详解Python模块decimal
2019/06/26 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
python3.7添加dlib模块的方法
2020/07/01 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
需求分析说明书
2014/05/09 职场文书
国际贸易系求职信
2014/08/09 职场文书
结对共建协议书
2014/08/20 职场文书
2014年居委会工作总结
2014/12/09 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python