Ошибка типа в моей программе на Python?

import sqlite3

Book = sqlite3.connect("BookStore.db")
curbook = Book.cursor()
more=True
total_cost = 0.0
while(more):   
    Title = input("Enter Title of the book : ")
    curbook.execute("SELECT title,author,price FROM BookDetails WHERE title = '"+ Title +"';")
    record = curbook.fetchone()
    if record ==  None:
        print("No Record Found")
        break
    else :  
        print(record)
        no_of_copies = int(input("Enter Number of copies you want to purchase : "))
        More = input("Add more books? Y/N")
        if More == 'n' or More == 'N':
            more = False
        curbook.execute("SELECT price from BookDetails WHERE title = '"+ Title +"';")
        price = curbook.fetchone()
        total_cost = total_cost + no_of_copies * price
        print("Total Cost ",total_cost)
Book.close()

Ошибка:

Traceback (most recent call last):
  File "C:\Python35\Retrieve_Book.py", line 21, in <module>
    total_cost = total_cost + no_of_copies * price
TypeError: unsupported operand type(s) for +: 'float' and 'tuple'

В точности как указано в ошибке, либо no_of_copies, либо price являются tuple, а не числами с плавающей запятой.

JE_Muc 13.07.2018 12:14
fetchone() возвращает кортеж, содержащий данные из требуемых столбцов. Даже если это только один столбец, он все равно возвращает кортеж. Итак, price - это кортеж. Используйте price[0]
RohithS98 13.07.2018 12:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
54
1

Ответы 1

price - это кортеж

Пытаться:

total_cost = total_cost + no_of_copies * price[0]

Попробуйте распечатать price, и вы должны увидеть tuple ex: (10,). Вы можете получить доступ к этому элементу с помощью индексации.

Rakesh 13.07.2018 12:24

Другие вопросы по теме