@@ -477,6 +477,8 @@ cdef inline void __async_prepare_args_kwargs_callback(
477477 for value, (key, _) in zip (result, future_args_kwargs):
478478 args[key] = value
479479 except Exception as exception:
480+ exception.__traceback__.tb_frame.f_locals.clear()
481+ exception.__traceback__.tb_frame.f_locals.update(locals ())
480482 future_result.set_exception(exception)
481483 else :
482484 future_result.set_result(args)
@@ -525,6 +527,8 @@ cdef inline void __async_inject_attributes_callback(object future_result, object
525527 for name, value in attributes.items():
526528 setattr (instance, name, value)
527529 except Exception as exception:
530+ exception.__traceback__.tb_frame.f_locals.clear()
531+ exception.__traceback__.tb_frame.f_locals.update(locals ())
528532 future_result.set_exception(exception)
529533 else :
530534 future_result.set_result(instance)
@@ -575,15 +579,20 @@ cdef inline object __call(
575579 asyncio.ensure_future(args_kwargs_ready)
576580
577581 return future_result
578-
579- return call(* args, ** kwargs)
580-
582+ try :
583+ return call(* args, ** kwargs)
584+ except Exception as exception:
585+ exception.__traceback__.tb_frame.f_locals.clear()
586+ exception.__traceback__.tb_frame.f_locals.update(locals ())
587+ raise exception
581588
582589cdef inline void __async_call_callback(object future_result, object call, object future):
583590 try :
584591 args, kwargs = future.result()
585592 result = call(* args, ** kwargs)
586593 except Exception as exception:
594+ exception.__traceback__.tb_frame.f_locals.clear()
595+ exception.__traceback__.tb_frame.f_locals.update(locals ())
587596 future_result.set_exception(exception)
588597 else :
589598 if __is_future_or_coroutine(result):
@@ -597,6 +606,8 @@ cdef inline object __async_result_callback(object future_result, object future):
597606 try :
598607 result = future.result()
599608 except Exception as exception:
609+ exception.__traceback__.tb_frame.f_locals.clear()
610+ exception.__traceback__.tb_frame.f_locals.update(locals ())
600611 future_result.set_exception(exception)
601612 else :
602613 future_result.set_result(result)
0 commit comments