AttributeError: module ‘asyncio‘ has no attribute ‘run‘

1. 问题来源

今天在使用python框架时,遇到一个报错:AttributeError: module ‘asyncio’ has no attribute ‘run’,问题是这样的

用pycharm去运行fastapi——即下面一串代码时,报错了:

from fastapi import FastApi
import uvicorn 
app = FastApi()

@app.get('\')
def helloWorld():
	return {"FastApi":"Hello FastApi! nice to meet you! "}

         
if __name__ == '__main__':
	uvicorn.run('main:app')

报错:

E:\soft\python3.6.8\install\python.exe E:/soft/python3.6.8/wk/fastApiServerForEncoding/servece01.py
Traceback (most recent call last):
  File "E:/soft/python3.6.8/wk/fastApiServerForEncoding/servece01.py", line 10, in <module>
    uvicorn.run('servece01:app')
  File "E:\soft\python3.6.8\install\lib\site-packages\uvicorn\main.py", line 461, in run
    server.run()
  File "E:\soft\python3.6.8\install\lib\site-packages\uvicorn\server.py", line 67, in run
    return asyncio.run(self.serve(sockets=sockets))
AttributeError: module 'asyncio' has no attribute 'run'

Process finished with exit code 1

2. 定位问题

先到报错的代码,查看代码:

请添加图片描述

代码如下: asyncio.run(self.serve(sockets=sockets)) 中, 看能找到asiyncio中的run方法不,点击后跳转

class Server:
    def __init__(self, config: Config) -> None:
        self.config = config
        self.server_state = ServerState()

        self.started = False
        self.should_exit = False
        self.force_exit = False
        self.last_notified = 0.0

    def run(self, sockets: Optional[List[socket.socket]] = None) -> None:
        self.config.setup_event_loop()
        # 这行是报错代码,看看有没有对应的属性
        return asyncio.run(self.serve(sockets=sockets))
        

跳转后的代码如下:

import sys

# 这个是python的版本号,由于我的python是3.6.8版本的
# sys.version_info=3.6.8 所以造成没有分支可以走,造成run了个空气

if sys.version_info >= (3, 7):
    from typing import Awaitable, Optional, TypeVar

    _T = TypeVar("_T")
    if sys.version_info >= (3, 8):
        def run(main: Awaitable[_T], *, debug: Optional[bool] = ...) -> _T: ...
    else:
        def run(main: Awaitable[_T], *, debug: bool = ...) -> _T: ...

注: sys.version_info能查看python的版本

3. 处理问题

那么就有两个方法,

  • 第一种: 降低我的uvicorn的版本,让之能与我的3.6.8的版本能兼容
  • 第二种: 安装更高的版本的Python

4. 如何避免这类问题发生

版本不兼容问题,对于python而言,是一个老生常谈的问题了。这个应该是有一个比较好的处理方案,我暂时还没有那水平,到时候我会专门出一期,来谈谈如何避免这类问题的发生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值