[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Gracefully exiting with errors



I use

try:
ÂÂÂ ...
except:
 raise #show what went wrong
finally:
 pygame.display.quit()

This works for me with pygame_sdl2 in a python 3.4.0 virtualenv (using idle with a script in the VE as per http://stackoverflow.com/questions/4924068/how-to-launch-python-idle-from-a-virtual-environment-virtualenv )
It closes cleanly in that case. python3-pygame isn't available in the distro I'm using... OK, tried it in idle-python2.7 and it works there too.

Full example
import sys

try:
ÂÂÂ import pygame_sdl2 as pygame
except ImportError:
ÂÂÂ import pygame

pygame.init()

window_size = width, height = (800, 600)
speed = [5, 5]
background = "" 144, 0) #colour. red, green and blue.

screen = pygame.display.set_mode(window_size)

ball = pygame.image.load("ball.gif")
ballrect = ball.get_rect()

keep_going = True

try: #get ready to deal with any problems
 while keep_going:
ÂÂÂ for event in pygame.event.get():
ÂÂÂÂÂ if event.type == pygame.QUIT:
ÂÂÂÂÂÂÂ keep_going = False #exit the loop

ÂÂÂ ballrect = ballrect.move(speed)
ÂÂÂ if ballrect.left < 0 or ballrect.right > width:
ÂÂÂÂÂ speed[0] = -speed[0]
ÂÂÂ if ballrect.top < 0 or ballrect.bottom > height:
ÂÂÂÂÂ speed[1] = -speed[1]

ÂÂÂ screen.fill(background)
ÂÂÂ screen.blit(ball, ballrect)
ÂÂÂ pygame.display.flip()
except:
 raise #show what went wrong
finally:
 pygame.display.quit() #close the window


On 27 August 2015 at 05:29, <rockachu2@xxxxxxxxx> wrote:
Some example code:

Try:
  While running:
     .........pygame.update .....etc
  Pygame.quit
Except exception:
   Pygame.quit()
   Raise

That way even if it errors we still call pygame.quit(), which is what isn't happening since the idle doesn't call garbage collection on some code on error.Â




On Aug 26, 2015, at 14:23, Paul Vincent Craven <paul@xxxxxxxxxxxxxxxx> wrote:

When using Wing, I teach students to hit the red 'stop' button. The issue is when the process errors, it does not quit, it pauses. Thus the windows stays open and is unresponsive. By hitting the red square 'stop' button, you kill the process.

Paul Vincent Craven

On Wed, Aug 26, 2015 at 1:29 PM, bw <stabbingfinger@xxxxxxxxx> wrote:
I agree with Ian. You should just be able to allow the script to end without special closure. But you may also use sys.exit() and quit(). pygame.quit() is not usually needed, unless you intend to quit pygame and let the program continue onto something else.

What you're seeing, Bob, may be a problem with the IDE.

There is consensus that IDLE is bad. It creates weird problems (with pygame only? not sure how far it goes). Annoyances like those with IDLE will likely turn your students off of Python.

I don't know about WingIDE. You could try a different one. I really like PyCharm, but it is vast in features and a memory hog--possibly not ideal for beginners and school computers.

For learning you might consider going with a light syntax-highlighting editor and teaching students the use of the discrete pieces that an IDE integrates for you. In other words teach fundamentals and let an IDE be an elective choice for later. When it comes to ferreting out problems in the dev environment, one needs to know what is going on behind the IDE. For me it was very useful learning nuts and bolts, and then discovering what more an IDE can do for me.

Hope these tips are helpful.

bw


On 8/26/2015 10:55 AM, Ian Mallett wrote:
On Wed, Aug 26, 2015 at 11:38 AM, Bob Irving <bobirv@xxxxxxxxx> wrote:
Is there a way to exit your game gracefully when there are errors? We have found with both IDLE and WingIDE that the game hangs, requiring several clicks of the X, etc.

We are ending our game loop with

pygame.quit()
sys.exit()
âI prefer to let the script terminate itself (i.e. fall out the bottom), but sys.exit should work fine too. I remember having this issue with older versions of Python, but 2.7 or 3.* should work fine.

Here's some skeleton code that I use.

Ian