使用traceback.print_stack() 将为您提供与抛出异常完全相同的回溯:
async def test1():
await test2()
traceback.print_stack()
# raise Exception()
await test2() # Here
await test2()
如果你想接收对象而不是打印,你可以使用traceback.extract_stack()。
但是请注意,您正在做一些奇怪的事情。 asyncio coroutines 不应该运行使用它的生成器的自然函数,如 .send()。
在asyncio 中,您等待协程并使用事件循环运行顶级协程。请在documentation 中查看它是如何完成的。
我写了另一个小例子,展示了当你使用asyncio常规方式时如何在内部协程中打印开始:
import asyncio
import traceback
async def test3():
traceback.print_stack()
async def test2():
await test3()
async def test1():
await test2()
asyncio.run(test1())
你会看到:
File "C:\main.py", line 24, in <module>
asyncio.run(test1())
# inner event loop stack here
File "C:\main.py", line 21, in test1
await test2()
File "C:\main.py", line 17, in test2
await test3()
File "C:\main.py", line 13, in test3
traceback.print_stack()