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 errorCan someone tell me what I'm doing wrong?
-
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')
Johan
-
@johand Indeed you are correct.
As
new_errorandold_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.
-
@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')
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login