python捕获全局异常统一管理_python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中...

使用sys.excepthook函数进行全局异常的获取。

1. 使用MessageDialog实现异常显示;

2. 使用logger把捕获的异常信息输出到日志中;

步骤:定义异常处理函数, 并使用该函来替换掉系统的内置处理函数;

对于threading.py的异常捕获,需要对该文件进行一些改变:

如下:

try:

self.run()

except SystemExit:

if __debug__:

self._note("%s.__bootstrap(): raised SystemExit", self)

except:

if __debug__:

self._note("%s.__bootstrap(): unhandled exception", self)

# If sys.stderr is no more (most likely from interpreter

# shutdown) use self.__stderr. Otherwise still use sys (as in

# _sys) in case sys.stderr was redefined since the creation of

# self.

if _sys:

if id(_sys.excepthook) != id(_sys.__excepthook__):

exc_type, exc_value, exc_tb = self.__exc_info()

_sys.excepthook(exc_type, exc_value, exc_tb)

_sys.stderr.write("Exception in thread %s:\n%s\n" %

(self.name, _format_exc()))

#-*- coding: UTF-8 -*-

#-------------------------------------------------------------------------------

# Name: 模块except hook handler

# Purpose: 全局捕获异常

#

# Author: ankier

#

# Created: 17-08-2013

# Copyright: (c) ankier 2013

# Licence:

#-------------------------------------------------------------------------------

import logging

import sys

import traceback

import datetime

import wx

## @detail 创建记录异常的信息

class ExceptHookHandler(object):

## @detail 构造函数

# @param logFile: log的输入地址

# @param mainFrame: 是否需要在主窗口中弹出提醒

def __init__(self, logFile, mainFrame = None):

self.__LogFile = logFile

self.__MainFrame = mainFrame

self.__Logger = self.__BuildLogger()

#重定向异常捕获

sys.excepthook = self.__HandleException

## @detail 创建logger类

def __BuildLogger(self):

logger = logging.getLogger()

logger.setLevel(logging.DEBUG)

logger.addHandler(logging.FileHandler(self.__LogFile))

return logger

## @detail 捕获及输出异常类

# @param excType: 异常类型

# @param excValue: 异常对象

# @param tb: 异常的trace back

def __HandleException(self, excType, excValue, tb):

# first logger

try:

currentTime = datetime.datetime.now()

self.__Logger.info('Timestamp: %s'%(currentTime.strftime("%Y-%m-%d %H:%M:%S")))

self.__Logger.error("Uncaught exception:", exc_info=(excType, excValue, tb))

self.__Logger.info('\n')

except:

pass

# then call the default handler

sys.__excepthook__(excType, excValue, tb)

err_msg = ''.join(traceback.format_exception(excType, excValue, tb))

err_msg += '\n Your App happen an exception, please contact administration.'

# Here collecting traceback and some log files to be sent for debugging.

# But also possible to handle the error and continue working.

dlg = wx.MessageDialog(None, err_msg, 'Administration', wx.OK | wx.ICON_ERROR)

dlg.ShowModal()

dlg.Destroy()

输出效果:

log输出文件:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

r语言系统计算上是奇异的_R语言实现并行计算

Python作为多线程的编程语言在并行方面相对于R语言有很大的优势,然而作为占据统计分析一席之地的R语言自然不能没有并行计算的助力。那么我们来看下在R语言中有哪些并行的包:隐式并行:OpenBLAS,Intel MKL,NVIDIA cuBLA…

cansina 目录_dirmap - 一个高级web目录、文件扫描工具-华盟网

Dirmap一个高级web目录扫描工具,功能将会强于DirBuster、Dirsearch、cansina、御剑需求分析经过大量调研,总结一个优秀的web目录扫描工具至少具备以下功能:并发引擎能使用字典能纯爆破能爬取页面动态生成字典能fuzz扫描自定义请求自定义响应结…

唯有自己变得强大_物竞天择,适者生存,唯有强大自己,方能百毒不侵

物竞天择,适者生存,这是亘古不变的道理。面对生活中的困难,人生路上的挫折,我们只有足够坚强,足够勇敢,足够强大,才能战胜这一切。人活着要明白,你所有的负面,都源于你的…

树莓派c语言运行_树莓派完成简单的编程(四)

在上一篇文章中,我们学习了Vi文本编辑器,那么用它可以实现什么功能呢?树莓派python以及c语言编程这里我选择了最简单和很流行的两种编程语言:C语言和Python。实现最简单的功能,输出hello world。Python编程简介Python是…

mysql 读写引擎_揭秘MySQL存储引擎spider

转自:兴趣部落​buluo.qq.com导读: Spider是为MySQL/MariaDB开发的一个特殊引擎,具有内嵌分片功能。现在它已经被集成到MariaDB10.0及以上版本中,作为MariaDB的一个新的主要性。Spider的主要功能是将数据分散到多个后端节点&#…

python中的与或非_「Python基础」 While 循环语句

Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:while 判断条件:执行语句……执行语句可以是单个语句或语句块。判断条件可以是任何表达式&…

lamp mysql大小限制_LAMP 调优之:MySQL 服务器调优

关于 MySQL 调优有 3 种方法可以加快 MySQL 服务器的运行速度,效率从低到高依次为:替换有问题的硬件。对 MySQL 进程的设置进行调优。对查询进行优化。替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源。不过这种解决方…

go定时器 每天重复_Go语言学习基础-定时器、计时器

Timer计时器如果希望在将来的某个时间点执行Go代码,或者在某个时间间隔重复执行Go代码,使用Go内置的timer和ticker功能。先看定时器timer,然后再看计时器ticker。定时器代表未来的单个事件。告诉定时器需要等待多长时间,它返回一个…

html类名定义规则_HTML入门笔记1

HTML 是谁发明的?Tim Berners-LeeHTML起手式&#xff1a;HTML起手式 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

mysql主从虚拟机_虚拟机centos7Mysql实现主从配置

环境搭建在虚拟机上和创建两个一模一样的centos7系统&#xff0c;并安装相同版本的mysql(可以先创建一个再克隆)在master上操作登录mysqlmysql -u root -p使用mysqluse mysql;创建用户CREATE USER lystbc1% IDENTIFIED BY Lys135426tbc;给用户授权GRANT REPLICATION SLAVE ON *…

怎样检测mysql5.5安装成功_64位wiN7系统中装配MySQL5.5.17(测试安装成功哦!)

64位wiN7系统中安装mysql5.5.17(测试安装成功哦&#xff01;&#xff01;~~)下载地址&#xff1a;[url] http://www.mysql.com/downloads/mysql/[/url]下载的话需要登录,你只需按照要求注册一个账号,然后下载即可.我下载的是mysql-5.5.17-winx64.msi版本.安装步骤:Step 1. Mysq…

xcode 创建模拟器_Xcode编译WebKit

下载WebKit源码1)进入https://webkit.org/2)点击页面的 Get Started 进入新页面&#xff0c;如下图所示3)点击 Getting the code 进入新页面&#xff0c;如下图所示4)在源码下载页面&#xff0c;有多种下载方式&#xff0c;包括直接下载代码zip包&#xff0c;通过SVN下载&#…

mysql iscsi_iscsi共享存储的简单配置和应用

1、环境介绍SCSI(Small Computer System Interface)是块数据传输协议&#xff0c;在存储行业广泛应用&#xff0c;是存储设备最基本的标准协议。从根本上说&#xff0c;iSCSI协议是一种利用IP网络来传输潜伏时间短的SCSI数据块的方法&#xff0c;ISCSI使用以太网协议传送SCSI命…

request mysql 接口_TP5接口开发

开启debug调试模式(正式上线建议关闭)config.php// 应用调试模式app_debug > true,设置输出类型index.phpnamespace app\index\controller;class Index{public function index(){$data [name > steven, age > 24];return json([code > 0, msg > 操作成功, data…

django和mysql写注册_Django电商项目---完成注册页面和用户登录

完成基本的创建项目、用户注册、登录、注销功能创建Django项目,创建df_user的App创建静态文件夹static(跟manage.py保持在同一级别下)复制静态文件(css images js)到static路径下修改settings.py文件修改templates路径修改数据库新添加静态文件加载路径Pycharm连接mysql数据库…

命令行进入指定目录_VIM学习笔记 操作目录(Manipulate Directory)

在目录间移动使用以下命令&#xff0c;可以显示当前所在的目录&#xff1a;:pwd使用以下命令&#xff0c;在Linux下可以进入HOME目录&#xff0c;而在Windows下则显示当前所在目录&#xff1a;:cd使用以下命令&#xff0c;可以进入指定的目录&#xff1a;:cd D:tepm使用以下命令…

mysql cluster双机_GitHub - sophys/mysqlha: 博客“Mysql-cluster数据库集群双机HA研究”测试代码...

mysqlha本代码是基于博客Mysql-cluster数据库集群双机HA研究所写的。测试采用的是32位环境&#xff0c;linux环境为debian&#xff0c;如果是其他系列只需修改部分指令即可。mysql-cluster版本位&#xff1a;mysql-cluster-gpl-7.2.7-linux2.6-i686.tar.gz&#xff0c;可自行去…

mysql gtid基础_MySQL 基础知识梳理学习(四)----GTID

在日常运维中&#xff0c;GTID带来的最方便的作用就是搭建和维护主从复制。GTID的主从模式代替了MySQL早期版本中利用二进制日志文件的名称和日志位置的做法&#xff0c;使用GTID使操作和维护都变得更加简洁和可高。1.GTID的优点(1)基于GTID搭建主从复制根据简单。(2)可以确保每…

k8s pod MySQL环境变量_Kubernetes 配置Pod和容器(一)定义容器环境变量

此页展示了如何给运行在Kubernetes Pod中的容器定义环境变量。开始之前必须有一个Kubernets集群&#xff0c;和一个能和集群沟通的kubectl命令行工具。如果你还没有集群&#xff0c;你可以用Minikube建立一个集群。给容器定义环境变量当你建立了一个Pod,你可以给你运行在Pod中的…

koa2 mysql 中间件_Koa2第二篇:中间件

第一篇介绍了生成器目录设计。xyzcoding&#xff1a;Koa2第一篇&#xff1a;详解生成器​zhuanlan.zhihu.com接下来学习Koa2的中间件。Koa2本身只能算一个极简的HTTP服务器&#xff0c;自身不内置中间件&#xff0c;但是提供中间件内核。中间件是Koa2的核心&#xff0c;因此需要…