ValueError: [TypeError("'coroutine' object is not iterable"), TypeError('vars() argument must have __dict__ attribute')]
在fastapi ,uvloop使用异步函数
使用异步的时候 ‘coroutine’ object is not iterable错误
原来发现,是同步函数中调用异步代码,
请在外面函数中加上async ,await
ValueError: [TypeError("'coroutine' object is not iterable"), TypeError('vars() argument must have __dict__ attribute')]在fastapi ,uvloop使用异步函数使用异步的时候 ‘coroutine’ object is not iterable错误原来发现,是同步函数中调用异步代码,请在外面函数中加上async ,await...
一般遇到这种情况是因为忘记加 await 了,同步调用函数导致反回了协程,再无脑去点下面的属性就会报没有这个属性的错误。
在网上没搜到这种解决,可能是因为太低级了,特此纪念一下。。。
原因是在一个异步方法中调用了另一个异步方法但是又依赖该异步方法的返回结果,要解决这个问题在所调用的方法之前添加一个await即可,示例:
@router.post("/factory/createStudentAndXxx",
description="新增一个学生并开一节正式课", tags=["开正式课"])
async def create_student_and_xxx(seller_mobile):
if seller_mobile is None:
NotImplementedError: typ "[‘safe’, ‘rt’]"not recognised (need to install plug-in?)
pip install ruamel.yaml==0.16.5
‘
coroutine’
object is not
iterable
在python中对代码很容易实现对普通函数的测试,只需要进到该脚本(py文件)的目录,然后在命令行python3,在python环境里import该脚本,就能实现了。可是如果这个函数的定义有async def就无法直接调用它了,如果强行运行,你会得到错误提示:
TypeError: 'coroutine' object is not callable
那怎么办呢?这里我设计了一个小的绕开函数,假设脚本文件为module.py 而其内容很简单,我的目标就是运行这个asprint函数
import asynci
⾸先我们要理解迭代器(iterators)。根据维基百科,迭代器是⼀个让程序员可以遍历⼀个容器(特别是列表)的对象。然⽽,⼀个迭代器在遍历并读取⼀个容器的数据元素时,并不会执⾏⼀个迭代。你可能有点晕了,那我们来个慢动作。换句话说这⾥有三个部分:
可迭代对象(Iterable)
迭代器(Iterator)
迭代(Iteration)
上⾯这些部分互相联系。我们会先各个击破来讨论他们,然后再讨论⽣成器(generators).
1、可迭代对象(Iterable)
Python中任意的对象,只要它定义了