使用装饰器将类方法包装在 try / except 中

2024-04-20

我有一个通用函数,可以将有关异常的信息发送到应用程序日志。 我用exception_handler来自类中方法的函数。传入并由应用程序调用的应用程序日志处理程序exception_handler创建一个 JSON 字符串,该字符串是实际发送到日志文件的内容。这一切都很好。

def exception_handler(log, terminate=False):
    exc_type, exc_value, exc_tb = sys.exc_info()
    filename, line_num, func_name, text = traceback.extract_tb(exc_tb)[-1]
    log.error('{0} Thrown from module: {1} in {2} at line: {3} ({4})'.format(exc_value, filename, func_name, line_num, text))
    del (filename, line_num, func_name, text)
    if terminate:
        sys.exit()

我按如下方式使用它:(一个超简化的示例)

from utils import exception_handler

class Demo1(object):
    def __init__(self):
        self.log = {a class that implements the application log}

    def demo(self, name):
        try:
            print(name)
        except Exception:
            exception_handler(self.log, True)

我想改变exception_handler用作大量方法的装饰器,即:

@handle_exceptions
def func1(self, name)
    {some code that gets wrapped in a try / except by the decorator}

我看过很多关于装饰器的文章,但我还没有弄清楚如何实现我想要做的事情。我需要传递对活动日志对象的引用,并将 0 个或多个参数传递给包装函数。我很乐意转换exception_handler类中的方法(如果这能让事情变得更容易)。


这样的装饰器很简单:

def handle_exceptions(f):
    def wrapper(*args, **kw):
        try:
            return f(*args, **kw)
        except Exception:
            self = args[0]
            exception_handler(self.log, True)
    return wrapper

这个装饰器只是调用一个包装函数try suite.

这只能应用于方法,因为它假设第一个参数是self.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用装饰器将类方法包装在 try / except 中 的相关文章

  • 列出类的所有实例

    我编写了一个 Python 模块 其中有几个类继承自一个名为MasterBlock 我想在脚本中导入此模块 创建这些类的多个实例 然后获取该类的所有子级的所有现有实例的列表MasterBlock班级 我找到了一些解决方案vars Block
  • “NoneType”对象不可订阅?

    list1 name1 info1 10 list2 name2 info2 30 list3 name3 info3 50 MASTERLIST list1 list2 list3 def printer lst print Availa
  • 为什么 urllib2 出现 urllib2.HTTPError 而 urllib 没有错误?

    我有以下简单的代码 import urllib2 import sys sys path append BeautifulSoup BeautifulSoup 3 1 0 1 from BeautifulSoup import page h
  • Pytorch 损失为 nan

    我正在尝试用 pytorch 编写我的第一个神经网络 不幸的是 当我想要得到损失时遇到了问题 出现以下错误信息 RuntimeError Function LogSoftmaxBackward0 returned nan values in
  • 以类似字典的方式将新项目添加到某些结构化数组中

    我想扩展 numpy 中的结构化数组对象 以便我可以轻松添加新元素 例如 对于一个简单的结构化数组 gt gt gt import numpy as np gt gt gt x np ndarray 2 dtype names A B fo
  • MySQL 的 read_sql() 非常慢

    我将 MySQL 与 pandas 和 sqlalchemy 一起使用 然而 它的速度非常慢 对于一个包含 1100 万行的表 一个简单的查询需要 11 分钟以上才能完成 哪些行动可以改善这种表现 提到的表没有主键 并且仅由一列索引 fro
  • 如何/在哪里发布 Python 包

    如果一个人创建了一个有用的 Python 包 那么如何 在哪里发布 宣传它以供其他人使用 我已经把它放到了 github 上 但几周后谷歌也没有找到它 包装整洁完整 我制作它供我个人使用 不与其他人分享将是一种耻辱 这是 PyPI 指南 h
  • 识别 Windows 版本

    我正在编写一个打印出详细 Windows 版本信息的函数 输出可能是这样的元组 32bit XP Professional SP3 English 它将支持 Windows XP 及更高版本 我一直坚持获取 Windows 版本 例如 专业
  • 从 SQL Server 中调用 Python 文件

    我的文件名中有 Python 脚本 C Python HL py 在此 Python 脚本中 有预测模型以及对 SQL 数据库中某些表的更新 我想将此文件称为 SQL 作业 我怎样才能做到这一点 这个问题不一样 如何在 SQL Server
  • 使用 asyncore 读取网站

    我想异步阅读一个网站 据我所知 这是不可能的 urllib 现在我尝试使用普通套接字进行阅读 但是 HTTP 给我带来了麻烦 我遇到了各种时髦的编码 例如传输编码 分块 必须手动解析所有这些东西 我现在想编码 C 而不是 python 难道
  • 使用 Pandas 滚动差异

    您好 我正在尝试使用 Pandas 滚动函数来计算下表中的滚动差异 我正在尝试生成 每月可用项目 列中的值 但没有得到任何结果 请帮忙 Item Adds Subtracts Month Monthly Available items A
  • 可重用的 Tensorflow 卷积网络

    我想重用来自Tensorflow 专业人士的 MNIST CNN 示例 http www tensorflow org tutorials mnist pros index md 我的图像尺寸为 388px X 191px 只有 2 个输出
  • “分页文件太小,无法完成此操作”尝试训练 YOLOv5 对象检测模型时出错

    我有大约 50000 个图像和注释文件用于训练 YOLOv5 对象检测模型 我在另一台计算机上仅使用 CPU 训练模型没有问题 但需要太长时间 因此我需要 GPU 训练 我的问题是 当我尝试使用 GPU 进行训练时 我不断收到此错误 OSE
  • captureWarnings 设置为 True 不会捕获警告

    我想记录所有警告 我以为这样的设定captureWarnings to True应该可以解决问题 但事实并非如此 代码 import logging import warnings from logging handlers import
  • 如何点击 Google Trends 中的“加载更多”按钮并通过 Selenium 和 Python 打印所有标题

    这次我想单击一个按钮来加载更多实时搜索 这是网站的链接 该按钮位于页面末尾 代码如下 div class feed load more button Load more div 由于涉及到一些 AngularJS 我不知道该怎么做 有什么提
  • NumPy 数组不可 JSON 序列化

    创建 NumPy 数组并将其保存为 Django 上下文变量后 加载网页时收到以下错误 array 0 239 479 717 952 1192 1432 1667 dtype int64 is not JSON serializable
  • 使用 PIL 合并图像时模式不匹配

    我正在传递 jpg 文件的名称 def split image into bands filename img Image open filename data img getdata red d 0 0 0 for d in data L
  • 在Python中计算矩阵乘以其转置(AA^T)的最快方法

    在Python中将矩阵与其转置 AA T 相乘的最快方法是什么 我认为 NumPy SciPy 没有考虑使用例如时涉及的对称性 np dot or np matmul 得到的矩阵总是对称的 所以我可以想象有一个更快的解决方案 None
  • 矩阵求逆 (3,3) python - 硬编码与 numpy.linalg.inv

    对于大量矩阵 我需要计算定义为的距离度量 尽管我确实知道强烈建议不要使用矩阵求逆 但我没有找到解决方法 因此 我尝试通过对矩阵求逆进行硬编码来提高性能 因为所有矩阵的大小均为 3 3 我预计这至少会是一个微小的改进 但事实并非如此 为什么
  • 如何访问模板缓存? - 姜戈

    I am 缓存 HTML在几个模板内 例如 cache 900 stats stats endcache 我可以使用以下方式访问缓存吗低级图书馆 例如 html cache get stats 我确实需要对模板缓存进行一些细粒度的控制 有任

随机推荐

  • 如何计算scipy中曲线拟合的可能性?

    我有一个非线性模型拟合 如下所示 深色实线是模型拟合 灰色部分是原始数据 问题的简短版本 如何获得该模型拟合的可能性 以便我可以执行对数似然比测试 假设残差服从正态分布 我对统计学比较陌生 我目前的想法是 从曲线拟合中得到残差 并计算残差的
  • YouTube 视频 ID 的最大长度是多少?

    我正在开发一个显示 YouTube 视频的应用程序 我想将视频 id 存储在数据库中 但是因为会有很多视频 我想最小化所需的空间 所以有人知道 youtube 上视频 id 的最大长度吗 几乎可以肯定它会保持在 11 个字符 各个字符来自一
  • 是否可以创建一个不带参数的 C 可变参数函数? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中是否可以有一个没有非可变参数的可变参数函数 https stackoverflow com questions 2622147 is it possible to have a variadic
  • 按渐近增长率对函数排序

    按渐近增长率的非降序列出以下函数 如果两个或多个函数具有相同的渐近增长率 则将它们分组在一起 g1 n n g2 n n 3 4n g3 n 2n log 以 2 为底 n g4 n 2 n g5 n 3 3 log 以 3 为底 n g6
  • 在 JSF 中使用消息束时从验证消息中删除组件 ID

    我正在练习JSF 我创建了一个带有用户 ID 和密码字段的登录屏幕 现在两个输入字段都需要 true 我创建了 message properties 文件并向其中添加了以下验证 ID javax faces component UIInpu
  • Codeigniter:使用 RESTful 服务

    是否有一个易于设置的 Codeigniter REST 库 我可以用它来使用 RESTful 服务 我尝试设置this https github com philsturgeon codeigniter restclient图书馆 但无法设
  • 无法在 macOS High Sierra 上打开 SQL 编辑器

    自从更新到 macOS High Sierra 以来 我一直无法在 MySQL Workbench 上打开 SQL 编辑器 When I try to connect to the database as usual I m given t
  • 如何获取真实的UTC时间戳(与客户端无关)?

    有没有办法获得real当前 UTC 时间戳而不依赖于客户端时间 这可能无法在每个客户端上正确设置 我知道 JavaScript 的getTime 我可以获取以毫秒为单位的 UTC 时间戳 它独立于客户的时区 但我认为它取决于客户的当前时间
  • CoTaskMemAlloc v malloc v AllocHGlobal

    我读过 在 Windows 上 malloc 与 CoTaskMemAlloc 不同 CoTaskMemAlloc 与 AllocHGlobal 不同 对于 C 用户来说 这意味着如果我有一个返回 malloc 指针的 C 函数 我需要对其
  • Android SeekBar 最小和连续浮点值属性

    我正在寻找一种在 SeekBar 中实现最小值的方法 并且还可以选择增加十进制数字 例如 当前我的 SeekBar 的最小值设置为 0 但我需要它从值 0 2 开始 另外 我希望能够让用户以 0 1 的精度选择 0 2 到 10 0 之间的
  • 如何理解Cassandra中的“灵活模式”?

    我是 Cassandra 的新手 可以在下面的维基百科中找到 列族 自 CQL 3 起称为 表 类似于 RDBMS 关系数据库管理系统 中的表 列族包含行和列 每行都由行键唯一标识 每行有多列 每列都有名称 值和时间戳 与 RDBMS 中的
  • 在 Windows 10 和 PHP 7.3 中安装 AMQP

    我想在 Windows 10 中使用 PHP 7 3 安装 AMQP 以便在 symfony 4 中使用 Windows 不使用任何 apache iis nginx 并直接由 symfony 运行 一切还好 直到 我决定在项目中使用rab
  • ggplot2:将面/条文本分割成两行

    考虑以下带有长面 条带文本的 ggplot2 图 断成两行 该文本超出了专门用于分面标题的区域 library ggplot2 x lt c 1 3 1 3 y lt c 3 1 1 3 grp lt c 0 0 0 1 1 1 p lt
  • Javascript:作用域链何时创建?

    我听到过两种说法 当定义函数时 In book Professional Javascript for Web Developers 3rd Edition 在里面Chapter 7 Function Expressions封闭部件 当co
  • 400 错误。需要收件人地址。卷曲

    我将 Gmail API 与curl一起使用 用户 消息 发送 https developers google com gmail api v1 reference users messages send 但我收到错误 400 需要收件人地
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • 回归测试是整个测试套件还是测试样本?

    我被告知回归测试是整体测试的一个小样本 仅足以证明引入更改或新模块时没有破坏任何内容 然而 本文 http www iceincusa com 16csp content 16 smoke smkrgt htm罗恩 莫里森和格雷迪 布奇的著
  • 我必须初始化简单的类成员变量吗? [复制]

    这个问题在这里已经有答案了 快速初学者问题 Do I have初始化简单的类成员变量 或者是否保证在任何情况下都为它们分配默认值 Example class Foo int i is i 0 or do I need the followi
  • 使用 JavaScript 使文本框可编辑

    我有一个文本框readonly readonly 这意味着我无法编辑它 但我想要的是当用户双击该文本框时使其可编辑 我已经尝试过的是
  • 使用装饰器将类方法包装在 try / except 中

    我有一个通用函数 可以将有关异常的信息发送到应用程序日志 我用exception handler来自类中方法的函数 传入并由应用程序调用的应用程序日志处理程序exception handler创建一个 JSON 字符串 该字符串是实际发送到