基本整数到字符串映射函数中的“函数对象是不可取消的”

时间:2010-06-13 19:24:13

标签: python typeerror

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

每次我在交互式提示符下运行我的代码时它似乎没有问题,但是当我尝试导入wordify并使用高于20的测试数运行它时,它失败,因为“TypeError:'function'对象是unsubscriptable”。< / p>

基于错误消息,似乎问题在于它尝试索引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

2 个答案:

答案 0 :(得分:2)

错误意味着在应该有列表的地方使用了一个函数,如:

def foo(): pass
foo[3]

您必须更改了一些代码。

顺便说一下,wordify(40)返回"fourty"。我拼写"forty" 你没有零的入场

答案 1 :(得分:1)

如果有人看到这里并遇到了同样的问题,如果返回了错误的变量名,你也可以获得一个指向函数对象的指针。例如,如果你有这样的功能:

 def foo():
   my_return_val = 0
   return return_val

 my_val = foo()

然后my_val将是一个指向函数对象的指针,这是“TypeError:'function'对象是unsubscriptable”的另一个原因,如果my_val被视为列表或数组,当它真的是一个函数对象时。

解决方案?简单!修复返回到my_return_val的foo中的变量名称。