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 cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
Jan 15 Python
超简单使用Python换脸实例
Mar 27 Python
如何更优雅地写python代码
Jul 02 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
django如何自定义manage.py管理命令
Apr 27 Python
Python中的xlrd模块使用整理
Jun 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
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
Sea.JS知识总结
2016/05/05 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
python实现进程间通信简单实例
2014/07/23 Python
为Python的web框架编写前端模版的教程
2015/04/30 Python
python连接MySQL数据库实例分析
2015/05/12 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
反对邪教标语
2014/06/30 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
中层干部考核评语
2015/01/04 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
pytorch中的numel函数用法说明
2021/05/13 Python
python获取对象信息的实例详解
2021/07/07 Python