Форум сайта python.su
0
Есть функция, которая принимает на вход два значения: название счета, количество денег, которые надо списать. Счет представляет из себя строку в БД. Проблема заключается в том, что мне выдается ошибка TypeError: unsupported operand type(s) for -=: ‘NoneType’ and ‘int’ Как это исправить?
def minus_money_on_acc(self, summ, account_name): #редактирование счета current_money = self.a.execute('''SELECT money FROM account WHERE name = ?''', (account_name,)).fetchone() current_money -= int(summ) self.a.execute('''UPDATE account SET money = ? WHERE name = ?''', (current_money,account_name)) self.account.commit()
def minus_money_on_acc(self, summ, account_name): #редактирование счета self.a.execute('''UPDATE account SET money = money - ? WHERE name = ?''', (summ,account_name)) self.account.commit()
Отредактировано Yaroslam322 (Фев. 27, 2020 14:33:12)
Офлайн
22
что мне выдается ошибка TypeError: unsupported operand type(s) for -=: ‘NoneType’ and ‘int’ Как это исправить?Судя по всему это происходит в строке
current_money -= int(summ)
def minus_money_on_acc(self, summ, account_name): #редактирование счета current_money = self.a.execute('''SELECT money FROM account WHERE name = ?''', (account_name,)).fetchone() try: current_money -= int(summ) self.a.execute('''UPDATE account SET money = ? WHERE name = ?''', (current_money,account_name)) self.account.commit() except TypeError: pass
Офлайн
568
StriverТак не надо писать никогда.
Видимо надо писать как-то так:
Офлайн
0
StriverПроблема в том, что в базе есть записи и я вполне себе могу их вывести
Офлайн
27
Надо самому себе ответить на вопрос: “Откуда в строке current_money -= int(summ) берётся summ”?
Далее в настройках таблицы включить значение по умолчанию “ноль” для этой колонки и запретить значения типа Null.
Если нет возможности внести правки в БД, то необходимо проверять полученное значение summ на None, до выполнения суммирования, и присваивать переменной 0, если его значение None или пропускать суммирование.
Отредактировано Rafik (Фев. 28, 2020 06:58:31)
Офлайн
0
Проблема решилась сама собой. Во-первых, я не правильно вставлял данные при вызове функции. Во-вторых, .fetchone() возвращает тип tuple, который не может менять свои значения.
Вот правильный код
def minus_money_on_acc(self, summ, account_name): #редактирование счета self.a.execute('''UPDATE account SET money = money - ? WHERE name = ?''', (summ, account_name)) self.account.commit()
Офлайн