@@ -685,7 +685,17 @@ def save(self, overwrite: bool = False) -> Tuple[str, dict]:
685
685
def delete (self ):
686
686
return self .trace_manager_client .delete_trace (self .trace_id )
687
687
688
-
688
+ def _capture_exception_for_trace (current_trace : Optional ['TraceClient' ], exc_info : Tuple [Optional [type ], Optional [BaseException ], Optional [types .TracebackType ]]):
689
+ if not current_trace :
690
+ return
691
+
692
+ exc_type , exc_value , exc_traceback_obj = exc_info
693
+ formatted_exception = {
694
+ "type" : exc_type .__name__ if exc_type else "UnknownExceptionType" ,
695
+ "message" : str (exc_value ) if exc_value else "No exception message" ,
696
+ "traceback" : traceback .format_tb (exc_traceback_obj ) if exc_traceback_obj else []
697
+ }
698
+ current_trace .record_error (formatted_exception )
689
699
class _DeepTracer :
690
700
_instance : Optional ["_DeepTracer" ] = None
691
701
_lock : threading .Lock = threading .Lock ()
@@ -877,14 +887,11 @@ def _trace(self, frame: types.FrameType, event: str, arg: Any):
877
887
current_span_var .reset (frame .f_locals ["_judgment_span_token" ])
878
888
879
889
elif event == "exception" :
880
- exc_type , exc_value , exc_traceback = arg
881
- formatted_exception = {
882
- "type" : exc_type .__name__ ,
883
- "message" : str (exc_value ),
884
- "traceback" : traceback .format_tb (exc_traceback )
885
- }
886
- current_trace = current_trace_var .get ()
887
- current_trace .record_error (formatted_exception )
890
+ exc_type = arg [0 ]
891
+ if issubclass (exc_type , (StopIteration , StopAsyncIteration , GeneratorExit )):
892
+ return
893
+ _capture_exception_for_trace (current_trace , arg )
894
+
888
895
889
896
return self ._trace
890
897
@@ -1163,14 +1170,7 @@ async def async_wrapper(*args, **kwargs):
1163
1170
try :
1164
1171
result = await func (* args , ** kwargs )
1165
1172
except Exception as e :
1166
- exc_type , exc_value , exc_traceback = sys .exc_info ()
1167
- formatted_exception = {
1168
- "type" : exc_type .__name__ ,
1169
- "message" : str (exc_value ),
1170
- "traceback" : traceback .format_tb (exc_traceback )
1171
- }
1172
- current_trace = current_trace_var .get ()
1173
- current_trace .record_error (formatted_exception )
1173
+ _capture_exception_for_trace (current_trace , sys .exc_info ())
1174
1174
raise e
1175
1175
1176
1176
# Record output
@@ -1195,14 +1195,7 @@ async def async_wrapper(*args, **kwargs):
1195
1195
try :
1196
1196
result = await func (* args , ** kwargs )
1197
1197
except Exception as e :
1198
- exc_type , exc_value , exc_traceback = sys .exc_info ()
1199
- formatted_exception = {
1200
- "type" : exc_type .__name__ ,
1201
- "message" : str (exc_value ),
1202
- "traceback" : traceback .format_tb (exc_traceback )
1203
- }
1204
- current_trace = current_trace_var .get ()
1205
- current_trace .record_error (formatted_exception )
1198
+ _capture_exception_for_trace (current_trace , sys .exc_info ())
1206
1199
raise e
1207
1200
1208
1201
span .record_output (result )
@@ -1252,14 +1245,7 @@ def wrapper(*args, **kwargs):
1252
1245
try :
1253
1246
result = func (* args , ** kwargs )
1254
1247
except Exception as e :
1255
- exc_type , exc_value , exc_traceback = sys .exc_info ()
1256
- formatted_exception = {
1257
- "type" : exc_type .__name__ ,
1258
- "message" : str (exc_value ),
1259
- "traceback" : traceback .format_tb (exc_traceback )
1260
- }
1261
- current_trace = current_trace_var .get ()
1262
- current_trace .record_error (formatted_exception )
1248
+ _capture_exception_for_trace (current_trace , sys .exc_info ())
1263
1249
raise e
1264
1250
1265
1251
# Record output
@@ -1285,14 +1271,7 @@ def wrapper(*args, **kwargs):
1285
1271
try :
1286
1272
result = func (* args , ** kwargs )
1287
1273
except Exception as e :
1288
- exc_type , exc_value , exc_traceback = sys .exc_info ()
1289
- formatted_exception = {
1290
- "type" : exc_type .__name__ ,
1291
- "message" : str (exc_value ),
1292
- "traceback" : traceback .format_tb (exc_traceback )
1293
- }
1294
- current_trace = current_trace_var .get ()
1295
- current_trace .record_error (formatted_exception )
1274
+ _capture_exception_for_trace (current_trace , sys .exc_info ())
1296
1275
raise e
1297
1276
1298
1277
span .record_output (result )
0 commit comments