我尝试在 Jupyter 笔记本中运行以下代码,但出现错误: AttributeError: 'coroutine' 对象没有属性 'get_me'
但它在 Visual Studio Code 上运行良好。知道为什么吗?
这是代码:
from telethon import TelegramClient, sync
api_id = ******
api_hash = '********************************'
client = TelegramClient('session_test', api_id, api_hash).start()
me = client.get_me()
print(me.stringify())
遇到的错误 “AttributeError: 'coroutine' object has no attribute 'get_me'” 意味着正在尝试在协程对象本身上而非在运行它的结果上访问
get_me
方法。
TelegramClient
中的方法(例如
get_me
)是异步的,这意味着它们需要使用
await
关键字来调用。
观察到 Jupyter Notebook 与 Visual Studio Code 之间行为不同的原因可能在于在这些环境中运行代码的方式不同。以下是可能出现差异的一些原因:
- Telethon 版本: 请确保在 Jupyter Notebook 和 Visual Studio Code 中使用的 Telethon 版本相同。不同的版本可能具有不同的 API 实现。
- 运行时环境: Jupyter Notebook 和 Visual Studio Code 可以使用不同的运行时环境来执行代码。确保两个环境都正确设置为处理异步操作。
- 代码执行: 可能在 Jupyter Notebook 和 Visual Studio Code 中以不同的方式执行代码。例如,在 Jupyter 中,可能正在一个单元格中运行整个代码,而在 Visual Studio Code 中,可能正在使用调试器或逐行执行代码。
要解决此错误,需要使用
await
关键字来调用
get_me
方法:
from telethon import TelegramClient, sync
api_id = ******
api_hash = '********************************'
client = TelegramClient('session_test', api_id, api_hash).start()
async def main():
me = await client.get_me()
print(me.stringify())
with client:
client.loop.run_until_complete(main())
此代码首先定义了一个名为
main
的异步函数,该函数使用
await
关键字调用
client.get_me()
。然后,它使用
client.loop.run_until_complete()
在事件循环内运行
main()
函数。这确保了在访问
me
变量之前正确执行异步操作。
对的代码进行这些更改应该可以在 Jupyter Notebook 和 Visual Studio Code 中解决 “AttributeError”。
标签:python,jupyter-notebook,attributeerror,telethon From: 54997158