Проблема с await

Форум Форумы ГЛАВНЫЙ ФОРУМ Проблема с await

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)
  • Автор
    Записи
  • #98
    TipTopTipTop
    Участник

    Из-за 49 строчки пишет следующее: SyntaxError: expected ‘except’ or ‘finally’ block. Я прям молодняк в питоне

    import requests
    import datetime
    from aiogram import Bot,types
    from aiogram.dispatcher import Dispatcher
    from aiogram.utils import executor
    from config import open_weather_token
     
    bot = Bot('6230098529:AAGDVMa1GJkiO69Aft1PTHyyuCqNInqbImc')
    dp = Dispatcher(bot)
    @dp.message_handler(commands=['start'])
    async def start_command(message: types.Message):
        await message.reply('Привет, напиши свой город')
     
     
    async def get_weather(message: types.Message):
        code_to_smile = {
            "Clear": "Ясно \U00002600",
            "Clouds": "Облачно \U00002601",
            "Rain": "Дождь \U00002614",
            "Drizzle": "Дождь \U00002614",
            "Thunderstorm": "Гроза \U000026A1",
            "Snow": "Снег \U0001F328",
            "Mist": "Туман \U0001F32B"
        }
     
        try:
            r = requests.get(
                f"http://api.openweathermap.org/data/2.5/weather?q={message.text}&appid={open_weather_token}&units=metric"
            )
            data = r.json()
     
            city = data["name"]
            cur_weather = data["main"]["temp"]
     
            weather_description = data["weather"][0]["main"]
            if weather_description in code_to_smile:
                wd = code_to_smile[weather_description]
            else:
                wd = "Выгляни в окно и посмотри что там, я не знаю"
     
            humidity = data["main"]["humidity"]
            pressure = data["main"]["pressure"]
            wind = data["wind"]["speed"]
            sunrise_timestamp = datetime.datetime.fromtimestamp(data["sys"]["sunrise"])
            sunset_timestamp = datetime.datetime.fromtimestamp(data["sys"]["sunset"])
            length_of_the_day = datetime.datetime.fromtimestamp(data["sys"]["sunset"]) - datetime.datetime.fromtimestamp(
                data["sys"]["sunrise"])
     
        await message.reply(f"{datetime.datetime.now().strftime('%Y-%m-%m %H:%M')}\n"
              f"Погода в твоем городе {city}\n"
              f"Температура: {cur_weather}°С\n"
              f"Влажность: {humidity}%\n"
              f"Давление : {pressure} мм.рт.ст\n"
              f"Ветер: {wind} мегаладонов в секунду\n"
              f"Время восхода: {sunrise_timestamp}\n"
              f"Время заката: {sunset_timestamp}\n"
              f"Длина дня: {length_of_the_day}"
              )
     
    if __name__ == '__main__':
        executor.start_polling(dp)
    #138
    NiemoNiemo
    Участник

    Ошибка в том, что у тебя try: есть, а except или finally нет. Нужно добавить обработку ошибок после try:.

    Добавь после строки с await message.reply(…) вот этот блок (с тем же отступом, что и try):

    python
    except Exception as e:
    await message.reply(f”Ошибка: {e}\nПроверь название города”)
    И не забудь задекорировать функцию get_weather хэндлером сообщений, например:

    python
    @dp.message_handler()
    async def get_weather(message: types.Message):
    # твой код

    #159
    BarmonITBarmonIT
    Участник

    Ошибка в строке 49 возникает, потому что у вас есть try:, но после него нет блока except или finally. Добавьте обработку ошибок после await message.reply(…) например, except Exception as e: и внутри отправку сообщения пользователю. И не забудьте повесить на функцию get_weather декоратор @dp.message_handler(), иначе бот не будет её вызывать при вводе города.

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)
  • Для ответа в этой теме необходимо авторизоваться.