【问题标题】:Problems with 'method' object is not subscriptable“方法”对象的问题不可下标
【发布时间】:2016-04-14 14:11:08
【问题描述】:

我有一个包含

的文本文件

id_is_g0000515

num_is_0.92

id_is_g0000774

num_is_1.04

id_is_g0000377

num_is_1.01

id_is_g0000521

num_is_5.6

假设按“g0000515”和仅按数字“0.92”对数据进行排序,没有字符串“id_is_”和“num_is_”。它给了我一个错误 TypeError: 'method' object is not subscriptable。有人能帮我吗?

    import os, sys, shutil, re


def readFile():
    from queue import PriorityQueue
    q = PriorityQueue()
    #try block will execute if the text file is found
    try:
        fileName= open("Real_format.txt",'r')
        #for tuple in fileName:
            #fileName.write('%s',tuple)
        for line in fileName:
                for string in line.strip().split(','):
                    if string.find("id_is_"):
                        q.put[-4:] #read the ID only as g0000774
                    elif string.find("num_is_"):
                        q.put[-4:] #read the num only as 0.92

        fileName.close() #close the file after reading          
        print("Displaying Sorted Data")
        #print("ID TYPE       Type")
        while not q.empty():
            print(string[30:35] + ":     " +q.get())
            #print(q.get())

            #catch block will execute if no text file is found
    except IOError:
                print("Error: FileNotFoundException")
                return

readFile() 

【问题讨论】:

  • 请包含异常的full tr​​aceback,这样我们就不用猜测发生在哪里了。听起来好像您正在尝试使用具有[...] 订阅访问权限的方法,而不是使用(...) 调用该方法。
  • 您希望q.put[-4:] 做什么?您正在使用 PriorityQueue.put() 方法,就好像它是那里的列表一样,这是行不通的。
  • 回溯(最近一次调用最后):文件“F:/Project Python/SortingAlgorithmBetaV2.py”,第 32 行,在 readFile() 文件“F:/Project Python/SortingAlgorithmBetaV2.py”中",第 15 行,在 readFile q.put[-4:] TypeError: 'method' object is not subscriptable
  • edit您的问题添加更多类似的信息。
  • q.put[-4:] 是提取“id_is_g0000515”或“num_is_0.92”的子字符串,这样我只得到g0000515和0.92没有字符串

标签: python string sorting io priority-queue


【解决方案1】:

您正在尝试在此处分割PriorityQueue.put() 方法:

q.put[-4:]

那行不通;方法对象不可切片。我认为您想对 string 变量进行切片,并将除前 4 个字符之外的所有字符都放入队列中:

q.put(string[4:])

请注意,我在此处使用了 正数;你不想要列表中的 4 个字符,你想要除前 4 个以外的所有字符。

当字符串以"num_is_" 开头时,您需要跳过更多字符; num_is_ 是 7 个字符,而不是 4 个:

q.put(string[7:])

【讨论】:

    猜你喜欢
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多