Python &引用;“功能对象不可订阅”;在基本整数到字符串映射函数中

Python &引用;“功能对象不可订阅”;在基本整数到字符串映射函数中,python,typeerror,Python,Typeerror,我正在尝试编写一个函数来返回任何小于1000的字符串 每次我在交互提示下运行代码时,它似乎都能正常工作,但当我尝试导入wordify并在测试编号大于20的情况下运行它时,它会失败,因为“TypeError:“function”对象不可订阅” 根据错误消息,问题似乎是当它尝试索引numString时(例如尝试从n=24的测试用例中提取数字4),而编译器认为numString是一个函数而不是字符串。因为函数的第一行是我将numString定义为变量n的字符串,所以我不确定为什么会这样 任何有助于避免

我正在尝试编写一个函数来返回任何小于1000的字符串


每次我在交互提示下运行代码时,它似乎都能正常工作,但当我尝试导入wordify并在测试编号大于20的情况下运行它时,它会失败,因为“TypeError:“function”对象不可订阅”

根据错误消息,问题似乎是当它尝试索引numString时(例如尝试从n=24的测试用例中提取数字4),而编译器认为numString是一个函数而不是字符串。因为函数的第一行是我将numString定义为变量n的字符串,所以我不确定为什么会这样

任何有助于避免这个错误的方法,甚至只是帮助解释我为什么会看到它,都将是非常棒的

def wordify(n):
    # Convert n to a string to parse out ones, tens and hundreds later. 
    numString = str(n)

    # N less than 20 is hard-coded.
    if n < 21:
        return numToWordMap(n)
    # N between 21 and 99 parses ones and tens then concatenates.
    elif n < 100:
        onesNum = numString[-1]
        ones = numToWordMap(int(onesNum))
        tensNum = numString[-2]
        tens = numToWordMap(int(tensNum)*10)
        return tens+ones
    else:
        # TODO
        pass

def numToWordMap(num):
    mapping = {
    0:"",
    1:"one",
    2:"two",
    3:"three",
    4:"four",
    5:"five",
    6:"six",
    7:"seven",
    8:"eight",
    9:"nine",
    10:"ten",
    11:"eleven",
    12:"twelve",
    13:"thirteen",
    14:"fourteen",
    15:"fifteen",
    16:"sixteen",
    17:"seventeen",
    18:"eighteen",
    19:"nineteen",
    20:"twenty",
    30:"thirty",
    40:"fourty",
    50:"fifty",
    60:"sixty",
    70:"seventy",
    80:"eighty",
    90:"ninety",
    100:"onehundred",
    200:"twohundred",
    300:"threehundred",
    400:"fourhundred",
    500:"fivehundred",
    600:"sixhundred",
    700:"sevenhundred",
    800:"eighthundred",
    900:"ninehundred",
    }

    return mapping[num]


if __name__ == '__main__':
    pass
def wordify(n):
#将n转换为字符串,以便在以后解析出1、10和数百。
numString=str(n)
#N小于20是硬编码的。
如果n<21:
返回numToWordMap(n)
#N在21和99之间解析1和10,然后连接。
elif n<100:
onesNum=numString[-1]
one=numToWordMap(int(onesNum))
tensNum=numString[-2]
tens=numToWordMap(int(tensNum)*10)
返回十+一
其他:
#待办事项
通过
def numToWordMap(num):
映射={
0:"",
1:"一",,
二:"两个",,
三:"三",,
四:"四",,
五:"五",,
6:“六”,
七:"七",,
八:"八",,
9:“九”,
10:“十”,
11:“11”,
12:“十二”,
13:“十三”,
14:“14”,
15:“十五”,
16:“十六”,
17:“17”,
18:“十八”,
19:“十九”,
20:“二十”,
30:“三十”,
40:“四十岁”,
50:“50”,
60:“六十”,
70:“70”,
80:“80”,
90:“90”,
100:“一百”,
200:“200”,
300:“三百”,
400:“四百”,
500:“五百”,
600:“六百”,
700:“七百红”,
800:“八次重击”,
900:“九百”,
}
返回映射[num]
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
通过

该错误表示在应该有列表的地方使用了函数,如下所示:

def foo(): pass
foo[3]
 def foo():
   my_return_val = 0
   return return_val

 my_val = foo()
你一定更改了一些代码

顺便说一下,
wordify(40)
返回了
“fourty”
。我把它拼成“四十”
如果有人在这里看到了与我相同的问题,那么如果返回了错误的变量名,也可以得到指向函数对象的指针。例如,如果您有这样的函数:

def foo(): pass
foo[3]
 def foo():
   my_return_val = 0
   return return_val

 my_val = foo()

然后my_val将是指向函数对象的指针,这是另一个导致“TypeError:“function”对象不可订阅”的原因,如果my_val被视为一个列表或数组,而它实际上是一个函数对象


解决方案是什么?简单!修复foo中返回到我的返回值的变量名。

我无法重现您的错误。请说明如何执行此操作和/或您收到的完整回溯。“TypeError:“function”对象不可订阅”。哪里什么电话号码。请提供带有实际行号的实际错误消息,并确保您的代码具有相同的行号,以便我们可以看到实际发生错误的行。事实上,现在这种情况没有发生在我身上,我认为这与我如何重新加载模块有关。一旦我关闭了交互式提示符并在PyDev中重新打开它,一切似乎都过去了。我相信你可以接受你自己的答案。此外,下一次它将提供更多细节[即python版本]