装饰者的奇怪之处

2024-01-02

我想制作一个装饰器来捕获异常并充分记录它们。

def logger(foo):
    try:
        print foo()
    except Exception as e:
        print e

@logger
def d():
    return 2/2

if __name__ == '__main__':
    d()

我认为是的,但是当我运行它时,出现了这样的异常:

1

Traceback (most recent call last):

  File "log.py", line 14, in <module>

    d()

TypeError: 'NoneType' object is not callable

为什么解释器告诉我该函数具有 None 类型,但调用它并打印答案?


您的装饰器需要返回一个函数,但它没有返回任何内容,因此“TypeError:'NoneType'对象不可调用”。你可以这样实现:

def logger(foo):
    def fn():
        try:
            print foo()
        except Exception as e:
            print e
    return fn

查看这个问题 https://stackoverflow.com/questions/739654/understanding-python-decorators有关如何编写/使用装饰器的一个很好的示例。

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

装饰者的奇怪之处 的相关文章

随机推荐

  • D3.js 醉酒工具提示

    D3 js 能够支持醉酒提示吗 如果可能的话 有人可以给我举个例子吗 谢谢 这是一个工作示例 使用 jQuery Tipsy 的 D3 工具提示 http bl ocks org 1373263
  • 像 @Override 这样的注释在 Java 内部是如何工作的?

    谁能向我解释一下 java 内部注释是如何工作的 我知道如何使用 java 中的 java lang annotation 库创建自定义注释 但我仍然不明白它的内部工作原理 例如 Override 注释 如果有人能详细解释这一点 我将非常感
  • 将图像源设置为 URI

    如果我有一个在线图像的链接 并且我想将图像源设置为此 uri 我应该如何做最好 我正在尝试的代码如下所示
  • 一段时间后更改文档中的变量值?

    我对网络开发很陌生 我想学习新东西 我有一个猫鼬模式 我不会发布它 因为它是用我自己的语言写的 你不会理解 所以我会解释 所以我有诸如名称 代码 创建条目的用户等信息 与我的问题无关 我有一个变量 比如说日期 如下所示 type Date
  • 使用 numpy 在 Python 中导入 nastran 节点套牌

    如果我想将 Nastran Deck 导入到 Python 数组中 可以使用 numpy 一次性完成 我该怎么办呢 我哪里错了 我有一个仅包含网格的文件 网格均与 Nastran 的短翻译器等距 8 个字符 MH Nodes 2345678
  • Jquery从左到右的动画宽度

    我正在尝试对菜单元素进行动画处理 在鼠标悬停时将宽度从 170 像素缩小到 150 像素 我的问题是 默认的 animate 收缩发生在矩形的右侧 我需要它在左侧收缩 我已经尝试过对左边距进行动画处理 但由于元素内部有文本 因此它在动画过程
  • log4j2 中增强的 Throwable 渲染器

    log4j2 中是否存在与增强型 Throwable Renderer 类 存在于 log4j1 中 等效的类 我正在将一个库迁移到 log4j2 但我没有看到 log4j2 支持此功能 任何帮助表示赞赏 在 log4j2 中 图案布局 h
  • 加载多个属性文件

    Java 中是否可以堆叠加载的属性 例如我可以这样做 Properties properties new Properties properties load new FileInputStream file1 properties pro
  • .NET mvc3 验证最小长度,但不是必需的

    我目前正在使用 MVC 数据注释对我的模型执行验证 MinLength 4 ErrorMessage The 0 must be at least 2 characters long MaxLength 16 ErrorMessage Th
  • 使用 ASP.NET MVC 的多语言 URL

    我正在制定一个新项目的概念 我需要支持多语言 URL 理想情况下 所有 URL 都需要使用用户的母语 所以我们不想使用domain com en contact and 域名 com es contact但我们喜欢域名 com contac
  • 简单的 css :before:hover 不起作用? CSSlint 没有错误?

    http jsfiddle net nicktheandroid k93ZK 2 http jsfiddle net nicktheandroid k93ZK 2 这应该非常简单 我只是不明白为什么它不起作用 当鼠标悬停在 before它应
  • android中无法构建react-native-push-notification

    我将在我的应用程序中使用react native push notification作为通知 但是当我使用这个库时 它会给我这样的错误 gt Task react native push notification compileDebugJ
  • 在 numpy 中对二进制值进行热编码

    我有一个 numpy 数组 如下所示 array 0 1 1 我希望它被表示为一个热编码的等价物 array 1 0 0 1 0 1 任何机构有任何想法吗 我尝试使用sklearn preprocessing LabelBinarizer
  • 在 Node.js 服务器上使用 supertest/superagent 读取响应输出缓冲区/流

    我正在尝试编写一个测试来检查 API 路由是否输出内容正确的 ZIP 文件 我正在使用 mocha 和 supertest 进行测试 我想实际读取输出流 缓冲区 读取 zip 文件内容并查看内容是否正确 有什么想法我应该怎么做 当我尝试阅读
  • 失败是因为原生 React 运行时不包含 Node 标准库

    包裹位于node modules crypto js core js尝试导入Node标准库模块crypto 它失败了 因为本机 React 运行时不包含 Node 标准库 阅读更多内容https docs expo io workflow
  • SQLite 和 JDBC:返回 UnsatisfiedLinkError

    我在 VirtualBox 中运行 Xubuntu 我安装了 sqlite3 由于某种原因 它不再捆绑 我将 sqlite jdbc 3 8 7 jar 添加到我的构建路径中 并运行这个简单的代码来测试它 import java sql p
  • 如何从jtable中连续勾选的jcheckbox获取值

    我有一个包含 3 列和基于数据库值的动态行的表 最后一列中有一个基于以下代码的 jcheckbox TableColumn tcolumn tabel getColumnModel getColumn 2 tcolumn setCellRe
  • jQuery回调问题

    我试图为 jquery 中的不同回调函数分配不同的数字 for i o i
  • 为什么Python2.7 dict比Python3 dict使用更多空间?

    我读过关于雷蒙德 赫廷格的新方法 https mail python org pipermail python dev 2012 December 123028 html实施的紧凑词典 https docs python org 3 wha
  • 装饰者的奇怪之处

    我想制作一个装饰器来捕获异常并充分记录它们 def logger foo try print foo except Exception as e print e logger def d return 2 2 if name main d