diff --git a/pydm/data_plugins/epics_plugins/pyepics_plugin_component.py b/pydm/data_plugins/epics_plugins/pyepics_plugin_component.py index 32d43f582..ca6d47f0a 100644 --- a/pydm/data_plugins/epics_plugins/pyepics_plugin_component.py +++ b/pydm/data_plugins/epics_plugins/pyepics_plugin_component.py @@ -156,19 +156,19 @@ def remove_listener(self, channel): if channel.value_signal is not None: try: channel.value_signal[str].disconnect(self.put_value) - except KeyError: + except (KeyError, TypeError): pass try: channel.value_signal[int].disconnect(self.put_value) - except KeyError: + except (KeyError, TypeError): pass try: channel.value_signal[float].disconnect(self.put_value) - except KeyError: + except (KeyError, TypeError): pass try: channel.value_signal[np.ndarray].disconnect(self.put_value) - except KeyError: + except (KeyError, TypeError): pass super(Connection, self).remove_listener(channel) diff --git a/pydm/data_plugins/plugin.py b/pydm/data_plugins/plugin.py index 6c141e6f0..b2e808aa3 100644 --- a/pydm/data_plugins/plugin.py +++ b/pydm/data_plugins/plugin.py @@ -91,25 +91,46 @@ def remove_listener(self, channel): pass if channel.severity_slot is not None: - self.new_severity_signal.disconnect(channel.severity_slot) + try: + self.new_severity_signal.disconnect(channel.severity_slot) + except (KeyError, TypeError): + pass if channel.write_access_slot is not None: - self.write_access_signal.disconnect(channel.write_access_slot) + try: + self.write_access_signal.disconnect(channel.write_access_slot) + except (KeyError, TypeError): + pass if channel.enum_strings_slot is not None: - self.enum_strings_signal.disconnect(channel.enum_strings_slot) + try: + self.enum_strings_signal.disconnect(channel.enum_strings_slot) + except (KeyError, TypeError): + pass if channel.unit_slot is not None: - self.unit_signal.disconnect(channel.unit_slot) + try: + self.unit_signal.disconnect(channel.unit_slot) + except (KeyError, TypeError): + pass if channel.upper_ctrl_limit_slot is not None: - self.upper_ctrl_limit_signal.disconnect(channel.upper_ctrl_limit_slot) + try: + self.upper_ctrl_limit_signal.disconnect(channel.upper_ctrl_limit_slot) + except (KeyError, TypeError): + pass if channel.lower_ctrl_limit_slot is not None: - self.lower_ctrl_limit_signal.disconnect(channel.lower_ctrl_limit_slot) + try: + self.lower_ctrl_limit_signal.disconnect(channel.lower_ctrl_limit_slot) + except (KeyError, TypeError): + pass if channel.prec_slot is not None: - self.prec_signal.disconnect(channel.prec_slot) + try: + self.prec_signal.disconnect(channel.prec_slot) + except (KeyError, TypeError): + pass self.listener_count = self.listener_count - 1 if self.listener_count < 1: