11import os
22import uuid
33import random
4+ import inspect
45
56from .utils import Dsn , SkipEvent , ContextVar
67from .transport import Transport
@@ -67,11 +68,6 @@ def _prepare_event(self, event, scope):
6768 if event .get ("event_id" ) is None :
6869 event ["event_id" ] = uuid .uuid4 ().hex
6970
70- if event ._exc_value is not None :
71- if _most_recent_exception .get (None ) is event ._exc_value :
72- raise SkipEvent ()
73- _most_recent_exception .set (event ._exc_value )
74-
7571 if scope is not None :
7672 scope .apply_to_event (event )
7773
@@ -84,21 +80,34 @@ def _prepare_event(self, event, scope):
8480 if event .get ("platform" ) is None :
8581 event ["platform" ] = "python"
8682
83+ event = strip_event (event )
84+ event = flatten_metadata (event )
85+ return event
86+
87+ def _check_should_capture (self , event ):
8788 if (
8889 self .options ["sample_rate" ] < 1.0
8990 and random .random () >= self .options ["sample_rate" ]
9091 ):
9192 raise SkipEvent ()
9293
93- event = strip_event (event )
94- event = flatten_metadata (event )
95- return event
94+ if event ._exc_value is not None :
95+ exclusions = self .options ["ignore_errors" ]
96+ exc_type = type (event ._exc_value )
97+
98+ if any (inspect .isclass (e ) and issubclass (exc_type , e ) for e in exclusions ):
99+ raise SkipEvent ()
100+
101+ if _most_recent_exception .get (None ) is event ._exc_value :
102+ raise SkipEvent ()
103+ _most_recent_exception .set (event ._exc_value )
96104
97105 def capture_event (self , event , scope = None ):
98106 """Captures an event."""
99107 if self ._transport is None :
100108 return
101109 try :
110+ self ._check_should_capture (event )
102111 event = self ._prepare_event (event , scope )
103112 except SkipEvent :
104113 return
0 commit comments