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写的服务监控程序实例
Jan 31 Python
Python中的Classes和Metaclasses详解
Apr 02 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
详解Django中间件执行顺序
Jul 16 Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
Aug 02 Python
Python 下载及安装详细步骤
Nov 04 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
一篇文章弄懂Python中的内建函数
Aug 07 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日期处理函数 整型日期格式
2011/01/12 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
js微信分享API
2020/10/11 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
python安装Scrapy图文教程
2017/08/14 Python
Python列表元素常见操作简单示例
2019/10/25 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
Python读取实时数据流示例
2019/12/02 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
学生无故旷课检讨书
2014/09/20 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL