为什么asnycio中的例外是迟到或根本没有出现?

时间:2016-08-10 13:50:24

标签: python exception async-await future python-asyncio

有时使用async/await语法后,我发现该程序不再正常工作。但没有任何例外。 例如:

async def my_func(self):
   async with self.engine() as conn:
      print('step1')  # step1 shows in console
      await conn.exceute("INSERT INTO bla-bla")
      print('step2')  # I can't watch 'step2', and no any exceptions caughted to console

但是如果我使用try/except语法异常可以捕获:

async def my_func(self):
   async with self.engine() as conn:
      print('step1')  # step1 shows in console
      try:
          await conn.exceute("INSERT INTO bla-bla")
      except Exception as e:
          print_exc()  # only by this way I can see whats wrong
      print('step2')

因此。我可以立即看到异常没有捕捉?或者我只能使用步骤并对其进行调试?

1 个答案:

答案 0 :(得分:1)

异常被引发,堆栈被展开。

真正的问题是:你用什么来运行你的协程?

loop.run_until_complete(my_func())将按您的预期处理异常。另一种使用场景可能有所不同。