Çözüldü Kod çalıştığı zaman "SYS: RuntimeWarning: Coroutine 'Loop. _loop' was never awaited" hatası veriyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

ROCKSTARLIVIN'

Kilopat
Katılım
28 Ocak 2019
Mesajlar
257
Bahettiğim GitHub Raw Linkindeki kodu çalıştırdığım zaman.

Kod:
Traceback (most recent call last):
  File "main.py", line 223, in <module>
    bot.add_cog(mcstatus_cog(bot, get_status))
  File "C:\Users\Administrator\Desktop\SurvivalHouseMaster-main\mcstatus_cog.py", line 27, in __init__
    self.periodically_get_status.start()
  File "C:\Users\Administrator\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\tasks\__init__.py", line 398, in start
    self._task = asyncio.create_task(self._loop(*args, **kwargs))
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2800.0_x64__qbz5n2kfra8p0\lib\asyncio\tasks.py", line 381, in create_task
    loop = events.get_running_loop()
RuntimeError: no running event loop
sys:1: RuntimeWarning: coroutine 'Loop._loop' was never awaited

Gibi bir hata alıyorum. Nasıl çözeceğimi de anlamadım. Python'a yeni yeni başlıyorum ve incelemek için eski open-source bir botu alıp güncellemek istedim. Çalıştırdığımda böyle bir hata alıyorum. Teşekkür ederim.
 
Son düzenleyen: Moderatör:
Çözüm
Await deyimi __main__ modülü seviyesinde değil yalnızca asenkron tanımlanan bir fonksiyonda coroutinenin eş zamanlı olarak çalıştırılması ve sonucunun beklenmesi için kullanılır. `add_cog` metodunu `on_ready` eventi'nin içinde yapın zira kodda cog'un eklendiği asenkron bir fonksiyon içerisinde değil, hatta `client.run` metodu kodun devam etmesini blokluyor zaten. Bu kadar fazla uğraşıya gerek yok.

Python:
@bot.event
async def on_ready():
    await bot.add_cog(mcstatus_cog(bot, get_status))
    await bot.add_cog(panel_cog(bot))
İlk olarak basit yol, ve büyük ihtimalle yaptığın hata, ana fonksiyonunu async tanımlamamış olman. main.py:223 hangi fonksiyon içindeyse fonksiyonu async def ile tanımlamak.

Diğer ve uzun çözüm de kendi olay döngünü oluşturmak.
Kod:
#:1
loop = asyncio.get_event_loop()
import asyncio
#:231
loop.create_task(self.periodically_get_status())
#:son
loop.run_forever()
 
İlk olarak basit yol, ve büyük ihtimalle yaptığın hata, ana fonksiyonunu async tanımlamamış olman. main.py:223 hangi fonksiyon içindeyse fonksiyonu async def ile tanımlamak.

Diğer ve uzun çözüm de kendi olay döngünü oluşturmak.
Kod:
#:1
loop = asyncio.get_event_loop()
import asyncio
#:231
loop.create_task(self.periodically_get_status())
#:son
loop.run_forever()
Bunu denediğimde ise bu seferde NameError: name 'self' is not defined 'self'in belirtilmediğine dair bir hata alıyorum. Tam olarak nerede belirtmem gerekir bunu? Yardımlarınız için çok teşekkür ederim.
 
Kod:
bot.add_cog(mcstatus_cog(bot, get_status))
bot.add_cog(panel_cog(bot))
Hatalı burası. await kullanılmalı.

Kod:
await bot.add_cog(mcstatus_cog(bot, get_status))
await bot.add_cog(panel_cog(bot))
Python:
@bot.event
async def on_ready():
    logger.info("Logged in as {0} with ID: {1}".format(
        bot.user.name, bot.user.id))

    async def periodically_get_status(self):
        while True:
            await asyncio.sleep(60) 

async def main():

    bot.loop.create_task(bot.periodically_get_status())
    bot.add_cog(mcstatus_cog(bot, get_status))
    bot.add_cog(panel_cog(bot))
   
    await bot.run(config_discord_token)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

böyle bir şey denedim, ne kadar hatalı olsa da :D. Sizin denediğinizi yaptığım zaman
Kod:
  File "main.py", line 226, in <module>
    bot.loop.create_task(bot.periodically_get_status())
  File "C:\Users\Administrator\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\client.py", line 140, in __getattr__
    raise AttributeError(msg)
böyle bir hata alıyordum galiba.
 
Hatanın devamı nerede?

Kod:
bot.add_cog(mcstatus_cog(bot, get_status))
bot.add_cog(panel_cog(bot))
Hatalı burası. await kullanılmalı.

Kod:
await bot.add_cog(mcstatus_cog(bot, get_status))
await bot.add_cog(panel_cog(bot))
Uğraşmayın, bunu uygulayın.
 
Hatanın devamı nerede?


Uğraşmayın, bunu uygulayın.
Bunu denediğim zaman ise
Python:
PS C:\Users\Administrator\Desktop\Ganomus Master> python main.py
  File "main.py", line 227
    await bot.add_cog(mcstatus_cog(bot, get_status))
    ^
SyntaxError: 'await' outside function
await'i fonksiyon dışında çağırdığım için bir hata atıyor galiba bu seferde.

Kod:
loop.create_task(self.periodically_get_status())
await bot.add_cog(mcstatus_cog(bot, get_status))
await bot.add_cog(panel_cog(bot))
bot.run(config_discord_token)
loop.run_forever()

son hali bu şekilde. uğraştırıyorum, kusura bakmayın.
 
Await deyimi __main__ modülü seviyesinde değil yalnızca asenkron tanımlanan bir fonksiyonda coroutinenin eş zamanlı olarak çalıştırılması ve sonucunun beklenmesi için kullanılır. `add_cog` metodunu `on_ready` eventi'nin içinde yapın zira kodda cog'un eklendiği asenkron bir fonksiyon içerisinde değil, hatta `client.run` metodu kodun devam etmesini blokluyor zaten. Bu kadar fazla uğraşıya gerek yok.

Python:
@bot.event
async def on_ready():
    await bot.add_cog(mcstatus_cog(bot, get_status))
    await bot.add_cog(panel_cog(bot))
 
Son düzenleme:
Çözüm

Technopat Haberler

Geri
Yukarı