micropython unexpected result
OK programming gurus I expected
old_error=0 def _logerrorin(error): global old_error print('old_error =', old_error) print('new_error =', error) if error!=old_error: print('a new error') old_error=error for i in range(2): try: 1/0 except Exception as e: _logerrorin(e)
to print 'a new error' just once, but I actually get
old_error = 0 new_error = divide by zero a new error old_error = divide by zero new_error = divide by zero a new error
Can someone tell me what I'm doing wrong?
robert-hh last edited by
@kjm e is an instance of the class <class 'ZeroDivisionError'>. With every new Exception raised, you create a new instance. Both instances have a different id. In MicroPython as well a Python, class instances are equal if their id is the same, which is not the case here.
If that logic is important for you, you can for instance compare the types in line 6:
if type(error) != type(old_error): print('a new error')
mnovella last edited by
@johand Indeed you are correct.
old_errorare Objects, comparing them directly will result in that they are different all the time.
Thus, as you suggested one may want to compare the string or something else that Exception throws.
I am guessing a bit now... Looks like you are compairing two different Exception-objects, they are not the same. You most likley want to compare the description string of the exceptions.
Not sure if this is the correct way, but you should get an idea of what to do:
if str(error)!=str(old_error): print('a new error')