Unsubscribe_event exception

Dear all,
I’m working with PyTango 9.2.5 and I’ve noted that unsubscribe_event failure raises a KeyError exception and not an EventSystemFailed (as stated in the documentation).
This may cause problems in exception handling.
May be I’m doing something wrong.

Thanks in advance for any help

Elisabetta

Hi Elisabetta

You haven’t provided much info, so I’ll take a guess. I see the docs do say it might throw EventSystemFailed, so we should probably add the KeyError as well.

If you’re not just asking about the documentation, but want to know why you are getting the KeyError, one of the causes, would be if you are using different instances of the DeviceProxy. For example, if you subscribe for with instance A, and unsubscribe with instance B, that will fail. You must use the same instance to subscribe and unsubscribe. This type of error would look something like this (dp2 is a tango.DeviceProxy object):


In [18]: dp2.unsubscribe_event(1)
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-18-44bf2988cd61> in <module>()
----> 1 dp2.unsubscribe_event(1)

/usr/lib/python2.7/dist-packages/tango/green.pyc in greener(obj, *args, **kwargs)
    193             green_mode = access('green_mode', None)
    194             executor = get_object_executor(obj, green_mode)
--> 195             return executor.run(fn, args, kwargs, wait=wait, timeout=timeout)
    196
    197         return greener

/usr/lib/python2.7/dist-packages/tango/green.pyc in run(self, fn, args, kwargs, wait, timeout)
    107         # Sychronous (no delegation)
    108         if not self.asynchronous or not self.in_executor_context():
--> 109             return fn(*args, **kwargs)
    110         # Asynchronous delegation
    111         accessor = self.delegate(fn, *args, **kwargs)

/usr/lib/python2.7/dist-packages/tango/device_proxy.pyc in __DeviceProxy__unsubscribe_event(self, event_id)
   1281             evt_info = se[event_id]
   1282         except KeyError:
-> 1283             raise KeyError("This device proxy does not own this subscription " + str(event_id))
   1284         del se[event_id]
   1285         self._pending_unsubscribe[event_id] = evt_info[0], timestamp + _UNSUBSCRIBE_LIFETIME

KeyError: 'This device proxy does not own this subscription 1'

There would be a similar error if the ID used to unsubscribe was invalid.

If that is not the type of error you are seeing, please post more details.

Hi Anton,
thanks for the reply.
I’m trying to enforce my code adding more accurate exception handling. To test a part of the code I’ve tried to unsubscribe an invalid event, but no tango.DevFailed exception was raised but only KeyError.
I didn’t understand why, I checked the documentation and ask to the forum to get confirm of this.
And I got it! :smiley:

Thanks

Elisabetta

Glad to help. Thanks for pointing out the issue.
I have made a PR on pytango to update the docs. Update exception types in proxy docstrings by ajoubertza · Pull Request #293 · tango-controls/pytango · GitHub