AttributeError:'tuple' 对象没有属性 'translate'

AttributeError:'tuple' 对象没有属性 'translate'

我正在开发这个程序,但不知为何,我不断收到此错误。这是 Ubuntu 导致的错误,还是我的代码中存在导致程序崩溃的问题?

我正在访问数据库并尝试从输出中删除以下字符:and, via value.translate(dictionary_of_bad_characters)。这就是我收到错误的地方。

def get_data(plu):          # Get the data needed
    global value            # Set the variable value to global

    conn = sqlite3.connect('plus.sqlite')   # Connect to the sqlite3 database

    cursor = conn.cursor()  # Set cursor as the cursor for plus.sqlite

    results = cursor.execute('SELECT value FROM plus WHERE plu=?', [plu])
    # Above code gets the data value for value with the PLU of plu

    value = results.fetchone()            # Get the results of value

    data = [row[0] for row in results.fetchall()]

    translation_table = dict.fromkeys(map(ord, '+-(),'), None)
    # Above code creates a table with the mapped characters

    value = value.translate(translation_table)
    # Above code removes any unnescessary characters from value

    response = {    'PLU':      plu,
                    'Value':    value
                    }       # Create the response variable

    value = int(value)      # Convert value to type integer

    cursor.close()          # Close the cursor
    conn.close()            # Close the connection

    return(value)           # Return to the program flow

答案1

此错误表明这value是一个元组,而不是您预期的字符串。这表示您的应用程序存在问题。

这里的问题是fetchone()返回一个一元组。你应该从这一行开始更改:

value = results.fetchone()

对此(注意后面的逗号value):

value, = results.fetchone()

或者这个(不推荐):

value = results.fetchone()[0]

但是为什么fetchone()返回的是元组而不是字符串呢?因为你可以返回SELECT多个列。例如,考虑以下 SQL 语句:

SELECT a, b, c FROM my_table;

在这种情况下,fetchone()将返回一个三元组。

写代码value, = fetchone()就是告诉 Python 你期望一个单元组,并且希望将单个项放入value。如果你期望三元组,那么你应该使用column_a, column_b, column_c = resulsts.fetchone()

value,这就是您应该选择 的原因fetchone()[0]


额外提示:我注意到你正在使用 Python 3。在这种情况下,你可以写:

translation_table = dict.fromkeys(b'+-(),', None)

加快您的代码并使其更加简洁。

相关内容