Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    micropython unexpected result

    Scheduled Pinned Locked Moved GPy
    4 Posts 4 Posters 143 Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K Offline
      kjm
      last edited by kjm

      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-hhR 1 Reply Last reply Reply Quote 0
      • J Offline
        johand
        last edited by

        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

        mnovellaM 1 Reply Last reply Reply Quote 1
        • mnovellaM Offline
          mnovella @johand
          last edited by

          @johand Indeed you are correct.

          As new_error and old_error are 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.

          1 Reply Last reply Reply Quote 0
          • robert-hhR Offline
            robert-hh @kjm
            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')

            1 Reply Last reply Reply Quote 0

            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
            • 1 / 1
            • First post
              Last post

            Pycom on Twitter

            Pycom