当前位置: 首页 > 知识库问答 >
问题:

TypeError:描述符'upper'需要'str'对象,但收到'function'(初学者)

刁茂才
2023-03-14

我试图将两个函数作为参数传递,但函数str.upperstr.strip有一个错误。我不知道我做错了什么?

def normalize_text(func1, func2):
    return func2(func1)


def my_strip(s):
    return str.strip(s)


def my_upper(s):
    return str.upper(s)


def test():
    if(normalize_text(my_strip, my_upper)(' foo ') == 'FOO'):
        print('Success')


test()

运行这样的代码python main.py

... 然后我面临一个错误:

TypeError: descriptor 'upper' requires a 'str' object but received a 'function'

共有2个答案

东方和惬
2023-03-14

您正在将func2传递给func1,但是func1需要一个字符串作为其参数,因此需要传递对某个对象调用func2的结果。

normalize_text可以返回一个lambda,该lambda调用输入参数上的两个函数。

def normalize_text(func1, func2):
    return lambda s: func1(func2(s))
陈寒
2023-03-14

您的职能应遵循以下原则:

def normalize_text(func1, func2):
    def func3(s):
        return func2(func1(s))
    return func3

函数1和函数2都接受一个字符串作为输入,并返回一个字符串。因此,当链接在一起时,一个应该处理另一个的输出,而不是函数本身。

 类似资料:
  • 问题内容: 我有一个变量,其日期格式为2015年4月25日。我正在尝试将其转换为以下内容: 但是我遇到了这个错误: 我该如何解决? 问题答案: 你有一个对象。该函数需要一个datetime对象。下面的代码需要你的转换的中间步骤的使用 此时,是日期时间对象。这意味着我们可以轻松地将其转换为任何格式的字符串。在您的特定情况下: 在现在是:

  • 我正在创造一个游戏。我写了这段代码来创建一个精灵和它的hitbox: 我原本把 但是后来我得到了一个错误,告诉我我的参数需要是pyplay。表面不是没有。 但是,当我将代码更改为时,它给出了以下错误代码:我该怎么办?

  • 以下是尝试使用套接字修改用户提供的输入的代码: 当我执行它并提供输入时,会发生以下错误: 我能做些什么来解决这个问题?

  • 我刚到爪哇。我正在学习将图像和其他数据从db检索到JTable的教程。数据将首先检索到ArrayList中,我得到了一个错误,说array是必需的,但object是找到的。我已经添加了我所有的代码。错误在文件中。如有任何帮助,不胜感激。 course.java

  • 我得到一个“TypeError:需要一个类似字节的对象,而不是'str'”。我在使用StringIO时遇到了一个错误“TypeError:initial_值必须是str或None,而不是bytes”,我在使用Python 3.7。 我也得到这个函数同样的错误。"返回pickle.load(打开(DATA_FILE))"

  • 问题内容: 几年前,我正在使用一个先前提出的问题的代码,但是,我认为这已经过时了。尝试运行代码,我收到上述错误。我仍然是Python的新手,因此无法从类似的问题中得到很多澄清。有人知道为什么会这样吗? 追溯 问题答案: 默认情况下返回stdout或stderr流的对象。这意味着您还需要在针对这些对象的操作中使用对象。使用对象。使用字节文字(注意前缀): 或先解码数据(如果您知道所使用的编码)(通常