omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Sticky exception when thrown inside Scene.controller_changed

    Pythonista
    2
    6
    3884
    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.
    • robnee
      robnee last edited by robnee

      I have a problem with Pythonista where, if I have a bug in my Scene.controller_changed function even after the bug is fixed the old exception will still be thrown every time controller_changed is called. This can be reset by force-quitting Pythonista. It's annoying because it makes you think your bug fixes aren't working.

      I'm happy to file an Issue for this but I thought it might be a good idea to ask if someone else can reproduce this. Notice the code below has two undefined name bugs. If you run this code you will get an exception on screen touch and pressing 'X' on a MFI controllers. Do this. Then fix both bugs by replacing bug with dog. Now when you run and tap the screen you should get a little 'woof' in the lower left-hand corner of the screen. However, when you press 'X' on a controller the old exception will still be thrown.

      Can someone with a MFI controller please try this and see if you can reproduce this?

      Rob

      '''This is trying to demonsrate a problem in Pythonista where an exception thrown inside controller_changed becomes "sticky" and will be rethrown even after the problem code is fixed.
      '''
      
      import scene
      
      dog = 'woof'
      
      
      class MyScene (scene.Scene):
          def touch_began(self, touch):
              print(bug)
          
          def controller_changed(self, id, key, value):
              if key == 'button_x' and value:
                  print(bug)
      
          
      if __name__ == '__main__':
          scene.run(MyScene())
      
      Phuket2 1 Reply Last reply Reply Quote 0
      • Phuket2
        Phuket2 @robnee last edited by

        @robnee , you are not quoting bug. There is no var bug

        class MyScene (scene.Scene):
        	
        	def touch_began(self, touch): 
        		print('bug')
        		
        	def controller_changed(self, id, key, value):
        		if key == 'button_x' and value:
        			print('bug')
        
        1 Reply Last reply Reply Quote 0
        • robnee
          robnee last edited by

          Yes. I know there is a bug in the program. It's specifically designed to throw uncaught exceptions. Once an exception is thrown inside the controller_changed function however, it is remembered. Even after you fix the bug, any way you like perhaps by quoting the word 'bug', the exception will still be thrown with a reference to the old argument to print. You must force-quit Pythonista in order to reset the interpreter to make the code run again. The same thing does not seem to happen with touch_began. If you run, get the exception in touch_began, fix the bug, rerun, and tap the exception will not reoccur. Of course, this is the expected and desired behavior. It's something peculiar to controller_changed that seems to be the problem. Please try and see if this same thing happens to you.

          Rob

          Phuket2 1 Reply Last reply Reply Quote 0
          • Phuket2
            Phuket2 @robnee last edited by

            @robnee , ok I sort oh see. I will stand back and let someone who knows what they are talking about help you. I do nothing with scene, just looked at it thinking maybe I could help.
            Oops, sorry

            1 Reply Last reply Reply Quote 0
            • robnee
              robnee last edited by

              Phuket2,

              No problem! I just felt like maybe I did a bad job of explaining my question so I wanted to restate. Thanks for offering to help. It why were all here :)

              Phuket2 1 Reply Last reply Reply Quote 0
              • Phuket2
                Phuket2 @robnee last edited by

                @robnee 👍
                I should have realised that
                def controller_changed(self, id, key, value) was a callback of some sorts. I havnt come across it before. Just looked it up. It's a game controller event, I had no hope in hell in helping 😁😁😁

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post
                Powered by NodeBB Forums | Contributors