首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理RuntimeWarning:人们从未期待过coroutine 'new_account‘

如何处理RuntimeWarning:人们从未期待过coroutine 'new_account‘
EN

Stack Overflow用户
提问于 2020-09-11 04:10:37
回答 1查看 1.4K关注 0票数 0

每当我启动web.py并转到localhost:8080/register时,我就会得到这个错误。这是Flash游戏的一部分。

代码语言:javascript
运行
复制
web.py:75: RuntimeWarning: coroutine 'new_account' was never awaited
  uid, password = utils.bot_common.new_account(app["redis"])
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Error handling request
Traceback (most recent call last):
  File "/root/.local/lib/python3.7/site-packages/aiohttp/web_protocol.py", line418, in start
    resp = await task
  File "/root/.local/lib/python3.7/site-packages/aiohttp/web_app.py", line 458,in _handle
    resp = await handler(request)
  File "/root/.local/lib/python3.7/site-packages/aiohttp/web_middlewares.py", lne 119, in impl
    return await handler(request)
  File "/root/.local/lib/python3.7/site-packages/aiohttp_session/__init__.py", ine 154, in factory
    response = await handler(request)
  File "web.py", line 75, in register
    uid, password = utils.bot_common.new_account(app["redis"])
TypeError: cannot unpack non-iterable coroutine object

以上错误点指向web.py第75行:

代码语言:javascript
运行
复制
@routes.get("/register")
async def register(request):
    if not registation:
        return web.Response(text="Регистрация отключена")
    uid, password =  utils.bot_common.new_account(app["redis"])
    return web.Response(text=f"Аккаунт создан, ваш логин - {uid}, "
                             f"пароль - {password}")

有关bot_commony.py注册机器人的更多信息:

代码语言:javascript
运行
复制
import string
import random
def random_string(string_length=20):
    letters = string.ascii_letters
    return ''.join(random.choice(letters) for i in range(string_length))

async def new_account(redis):
    await redis.incr("uids")
    uid = await redis.get("uids")
    pipe = redis.pipeline()
    pipe.set(f"uid:{uid}:lvt", 0)
    pipe.sadd(f"rooms:{uid}", "livingroom")
    pipe.rpush(f"rooms:{uid}:livingroom", "#livingRoom", 1)
    for i in range(1, 6):
        pipe.sadd(f"rooms:{uid}", f"room{i}")
        pipe.rpush(f"rooms:{uid}:room{i}", f"Комната {i}", 2)
    await pipe.execute()
    return uid
EN

回答 1

Stack Overflow用户

发布于 2020-09-11 15:03:06

new_account返回一个协同线,因此

代码语言:javascript
运行
复制
TypeError: cannot unpack non-iterable coroutine object

合作协议需要等待(或包装在任务中)。要修复这个特定的TypeError,您需要将代码更新为

代码语言:javascript
运行
复制
uid, password = await untold.bot_common.new_account(app["redis"])

一旦你做了这个改变,我想你会得到一个新的TypeError

代码语言:javascript
运行
复制
TypeError: cannot unpack non-iterable int object

这是因为new_account返回一个值:uid。基于await redis.incr("uids"),它看起来像是有一个整数,而不是一个包含两个值的字符串或容器。您要么需要将register中的行更改为

代码语言:javascript
运行
复制
uid = await untold.bot_common.new_account(app["redis"])

或者您需要更改new_account以返回多个值

代码语言:javascript
运行
复制
return uid, "some password"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63840674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档