PyScript、Pyodide、天气API调用问题:页面无输出无报错
问题分析与修复方案
你的代码存在几个关键问题,导致页面无输出且无错误提示,以下是具体问题和修复方案:
核心问题
- 异步方法调用错误:你重复调用了
response.json(),第二次调用时未加await关键字。response.json()是异步方法,直接调用会返回协程对象而非实际JSON数据,后续data.get('fact')操作协程对象会触发静默错误。 - 异步任务执行不规范:使用
asyncio.ensure_future启动任务后未处理异常,且PyScript中更适合用asyncio.run()直接运行异步函数,确保任务完整执行并暴露错误。 - 无错误捕获机制:API请求可能因密钥无效、网络问题失败,缺少异常捕获会导致错误被静默处理,无任何输出。
修复后的完整代码
<!DOCTYPE html> <html> <head> <script defer src="https://pyscript.net/releases/2022.12.1/pyscript.js"></script> <link rel="stylesheet" href="https://pyscript.net/releases/2022.12.1/pyscript.css"/> </head> <body> <py-script> import pyodide import asyncio API_KEY = '8e4cf478-53b6-45bc-8597-9946db9f1fd5' url = 'https://api.weather.yandex.ru/v2/forecast' params = { 'lat': 55.753215, 'lon': 37.622504, 'lang': 'ru_RU' } headers = { 'X-Yandex-API-Key': API_KEY } async def get_weather(): try: response = await pyodide.fetch(url=url, params=params, headers=headers, method="GET") # 检查请求是否成功 if not response.ok: print(f"请求失败,状态码: {response.status}") return # 仅调用一次异步JSON解析 data = await response.json() fact = data.get('fact') if not fact: print("未获取到实时天气数据") return temperature = fact.get('temp') print(f'Погода в Москве: {temperature} градусов по Цельсию') except Exception as e: print(f"发生错误: {str(e)}") # 规范运行异步函数 asyncio.run(get_weather()) </py-script> </body> </html>
额外提示
- PyScript的
print输出默认显示在浏览器开发者工具控制台(按F12打开),可在此查看输出和错误信息。 - 确认你的Yandex天气API密钥有效,若密钥过期或权限不足,也会导致请求失败。
内容的提问来源于stack exchange,提问作者Romario
相关产品推荐
相关产品推荐

