Missing 1 required positional argument

здравствуйте, я новичок в программировании, создаю бота с субд SQLite
долго не могу понять в чем заключается моя ошибка

def get_month_stats(user_id: int, year_month: str) -> str:
    cursor = db.get_cursor()
    cursor.execute(
        "SELECT SUM(amount)"
        "FROM expenses"
        f"WHERE STRFTIME('%Y-%m', created) = '{year_month}'"
        f"AND user_id = {user_id}"
    )
    result = cursor.fetchone()
    if not result[0]:
        return "В этом месяце ещё не было расходов."
    all_month_expenses = result[0]
    cursor.execute(
        "SELECT DISTINCT user_id "
        "FROM expenses "
        f"AND user_id = {user_id}"
    )
    result = []
    return (f"Всего потрачено: {all_month_expenses}\n")

выдает ошибку: TypeError: get_month_stats() missing 1 required positional argument: ‘year_month’

Пожалуйста, подскажите как решить

Видимо при вызове функции get_month_stats вы не передаете туда второй её параметр.

1 лайк

функция вызывается здесь

@dp.message_handler(lambda message: message.text == buttons.content_mnth_stats)
async def get_month_statistics(message: types.Message):
    now_year_month = expenses.get_year_month_now()
    stats_str = expenses.get_month_stats(now_year_month)
    kb = buttons.mrkup_chs_month_stats(expenses.get_budget_months(user_id))
    await message.answer(text(bold("Расходы за месяц\n\n")) +
                         stats_str,
                         parse_mode=ParseMode.MARKDOWN,
                         reply_markup=kb)

ну так вот тут передается один параметр

а тут объявлены два


и при вставке кода на форумы надо нажимать кнопку Код.

про код, спасибо, учту
изменила строчку на stats_str = expenses.get_month_stats(user_id, now_year_month)
но теперь выдает ошибку
NameError: name ‘user_id’ is not defined
Извините если я прям очень тупые вопросы задаю…

Переменной с именем user_id в этом коде и правда не видно :man_shrugging:

спасибо, с этим проблема решена
теперь следующая ошибка

def get_month_stats(user_id: int, year_month: str) -> str:
    cursor = db.get_cursor()
    cursor.execute(
        "SELECT SUM(amount)"
        "FROM expenses"
        f"WHERE STRFTIME('%Y-%m', created) = '{year_month}'"
        f"AND user_id = {user_id}"
    )
    result = cursor.fetchone()
    if not result[0]:
        return "В этом месяце ещё не было расходов."
    all_month_expenses = result[0]
    cursor.execute(
        "SELECT SUM(e.amount) "
        "FROM expenses e "
        f"WHERE STRFTIME('%Y-%m', created) = '{year_month}'"
        f"AND user_id = {user_id}"
    )
    result = []
    return (f"Всего потрачено: {all_month_expenses}\n")

in get_month_stats
cursor.execute(
sqlite3.OperationalError: near “(”: syntax error