diff --git a/frappy/modulebase.py b/frappy/modulebase.py index b0154be..272a22d 100644 --- a/frappy/modulebase.py +++ b/frappy/modulebase.py @@ -522,7 +522,9 @@ class Module(HasAccessibles): if validate: value = pobj.datatype(value) except Exception as e: - err = e + # allow to assign an exception to trigger an error_update message + err = value if isinstance(value, Exception) else e + changed = False else: changed = pobj.value != value or pobj.readerror # store the value even in case of error @@ -655,10 +657,13 @@ class Module(HasAccessibles): self.pollInfo.pending_errors.discard(rfunc.__name__) except Exception as e: if getattr(e, 'report_error', True): + self.log.debug('error in %r', rfunc) name = rfunc.__name__ self.pollInfo.pending_errors.add(name) # trigger o.k. message after error is resolved if isinstance(e, SECoPError): - e.raising_methods.append(name) + if name == 'doPoll': + # otherwise the method is already appended in rfunc + e.raising_methods.append(f'{self.name}.{name}') if e.silent: self.log.debug('%s', e.format(False)) else: @@ -666,7 +671,7 @@ class Module(HasAccessibles): if raise_com_failed and isinstance(e, CommunicationFailedError): raise else: - # not a SECoPError: this is proabably a programming error + # not a SECoPError: this is probably a programming error # we want to log the traceback self.log.error('%s', formatException())