@@ -629,9 +629,20 @@ def notify_attribute_listeners(self, attr_name, value, cache=False):
629629
630630 # Notify observers.
631631 for fn in self ._attribute_listeners .get (attr_name , []):
632- fn (self , attr_name , value )
632+ try :
633+ fn (self , attr_name , value )
634+ except Exception as e :
635+ errprinter ('>>> Exception in attribute handler for %s' %
636+ attr_name )
637+ errprinter ('>>> ' + str (e ))
638+
633639 for fn in self ._attribute_listeners .get ('*' , []):
634- fn (self , attr_name , value )
640+ try :
641+ fn (self , attr_name , value )
642+ except Exception as e :
643+ errprinter ('>>> Exception in attribute handler for %s' %
644+ attr_name )
645+ errprinter ('>>> ' + str (e ))
635646
636647 def on_attribute (self , name ):
637648 """
@@ -1464,9 +1475,21 @@ def remove_message_listener(self, name, fn):
14641475
14651476 def notify_message_listeners (self , name , msg ):
14661477 for fn in self ._message_listeners .get (name , []):
1467- fn (self , name , msg )
1478+ try :
1479+ fn (self , name , msg )
1480+ except Exception as e :
1481+ errprinter ('>>> Exception in message handler for %s' %
1482+ msg .get_type ())
1483+ errprinter ('>>> ' + str (e ))
1484+
14681485 for fn in self ._message_listeners .get ('*' , []):
1469- fn (self , name , msg )
1486+ try :
1487+ fn (self , name , msg )
1488+ except Exception as e :
1489+ errprinter ('>>> Exception in message handler for %s' %
1490+ msg .get_type ())
1491+ errprinter ('>>> ' + str (e ))
1492+
14701493
14711494 def close (self ):
14721495 return self ._handler .close ()
0 commit comments