Issue with sys.exit() in pygame

I am learning to use Pygame, and when I use sys.exit(), I run into a problem. Here is the code:

import pygame, sys,os
from pygame.locals import * 

pygame.init() 

window = pygame.display.set_mode((468, 60)) 
pygame.display.set_caption('Game') 
screen = pygame.display.get_surface() 

file_name = os.path.join("data","image.bmp")

surface = pygame.image.load(file_name)

screen.blit(surface, (0,0)) 
pygame.display.flip() 

def input(events): 
   for event in events: 
      if event.type == QUIT: 
         sys.exit(0) 
      else: 
         print event 

while True: 
   input(pygame.event.get()) 

It's really just the code from the pygame tutorial. The problem occurs when I actually try to exit, regardless of what event I try to use to sys.exit().

Traceback (most recent call last):
  File "C:/Python27/Lib/site-packages/pygame/examples/test.py", line 25, in <module>
    input(pygame.event.get())
  File "C:/Python27/Lib/site-packages/pygame/examples/test.py", line 20, in input
    sys.exit(0)
SystemExit: 0

... And then the program doesn't exit. What am I doing wrong here? Because I did notice that this code was for an antiquated version of Python.


Asked by: Hailey193 | Posted: 06-12-2021






Answer 1

sys.exit() 

alone is a bit unholy with pygame.. the proper way to exit a pygame app is to first break out of the mainloop then quit pygame then quit the program. ie.

while running == True:
    # catch events
    if event_type == quit:
        running = False  # breaks out of the loop

pygame.quit()  # quits pygame
sys.exit()

also it seems to me that you aren't catching the event properly.. it should be

if event.type == pygame.QUIT:

you can read more about events in pygame here.

Answered by: Dainton422 | Posted: 07-01-2022



Answer 2

sys.exit just throws an exception (a SystemExit exception). This has two unusual effects:

  1. It only exits the current thread in a multithreaded application
  2. The exception could have been caught.

Answered by: Lily486 | Posted: 07-01-2022



Answer 3

I solved this problem and the right code is below:

running = True
while running == True:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False  # Exiting the while loop

    screen.blit(background, (0,0))
    pygame.display.update()

pygame.quit() # Call the quit() method outside the while loop to end the application.

Answered by: Audrey992 | Posted: 07-01-2022



Answer 4

I have read in some sources there is a conflict between the mainloop() in Tkinter which runs the Python shell and Pygame.init() which the sys.exit() command follows.

The suggestion was to run the game from the command line to get round the problem rather than load the game using run (F5) from the shell.

A good side effect of this was that in my space invaders game, which does a lot of variable updating: 35 times a second, was that the animation ran correctly whereas from the shell it ran poorly and was jerky.

If i use the following code:

if event.type == QUIT:
    pygame.quit()
    sys.exit()

the game exits correctly but leaves an error message in the shell which has no effect on the game and is largely redundant. It is just a little ugly. This does not happen from the command line.

Summary: try running the game from the command line to avoid Tkinter problems

Answered by: Marcus780 | Posted: 07-01-2022



Answer 5

If you still have the issue, (after breaking the loop) try using sys.exit(0) instead of sys.exit(). Hope it'll help. It worked for me. It seems pygame expects the 'status' argument (i.e. 0 here) to be passed in explicitly.

See the below example:

isRunning = True
while isRunning:
# Catch events
if event.type == pygame.QUIT:
    isRunning = False # Breaks the loop

pygame.quit()
sys.exit(0)

Answered by: Julia630 | Posted: 07-01-2022



Similar questions

Python sys.exit() help?

I am working in Python and am trying to have a line of code execute and after it executes I am calling sys.exit() to have the script itself "exit." However, it seems that sys.exit() is executing before the line of code above it executes. Below is the code I am trying to implement: if something == True: self.redirect('http://www.google.com/') sys.exit() The...


How to use sys.exit() in Python

player_input = '' # This has to be initialized for the loop while player_input != 0: player_input = str(input('Roll or quit (r or q)')) if player_input == q: # This will break the loop if the player decides to quit print("Now let's see if I can beat your score of", player) break if player_input != r: print('invalid choice, try again') if player_input ==r: roll...


python - Is it possible for a unit test to assert that a method calls sys.exit()?

I have a Python 2.7 method that sometimes calls sys.exit(1) Is it possible to make a unit test that verifies this line of code is called when the right conditions are met?


linux - Python Daemon Thread Clean Up Logic on Abrupt sys.exit()

Using Linux and Python 2.7.6, I have a script that uploads lots of files at one time. I am using multi-threading with the Queue and Threading modules. I implemented a handler for SIGINT to stop the script if the user hits ctrl-C. I prefer to use daemon threads so I don't have to clear the queue, which would require alot of re-writing code to make the SIGINT handler have access to the Queue object since the handler...


python - Try and Except catch all errors, except for sys.exit()

I have created a function, but errors could pop up. That is why I want to use exceptions to generalize all errors into the same message. However, this function contains multiple sys.exit() calls. As a result, I would like to have my code jump into the except handler if an error was raised, unless it is caused by sys.exit(). How do I do this? try: myF...


python script doesn't stop with sys.exit()

In my Program I have a GUI with a progressbar. The value of the progressbar is a variable of a other script so I created an update function that refreshes the GUI so I have a moving progressbar. def update(lblhowfar,bar,window,Zeitraum,auswahl,testprogress):# update function to refresh the progress bar and the percentage label while rd.filtering_done==False: Progress=int(rd.Zähler/rd.Nenner) ...


python - How do I use sys.exit()?

How do I use sys.exit() in this while loop? The user inputs 3 sides of a triangle. If it is a right angle Pythagorean triangle, then it prints. If the user enters "0", the program ends. Also, is there a better way to write the infinite while loop besides using count = 0 and never incrementing it? def pythagoreanTriple(): count = 0 print("input 3 sides of a triang...


python - I can't catch sys.exit()

I want to prevent a python program to quit when it calls sys.exit, but the following solution doesn't work: Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32 &gt;&gt;&gt; import sys &gt;&gt;&gt; try: ... sys.exit() ... except SystemExit: ... print('asd') ... Process finished with exit code 0 I've also tried BaseExcep...


python - using sys.exit() and heroku threw an error

2022-02-21T01:07:54.352381+00:00 heroku[router]: at=error code=H14 desc=&quot;No web processes running&quot; method=GET path=&quot;/&quot; host=_botname.herokuapp.com request_id=88df74f6-a5a1-4ee9-a0a5-c98a22a60949 fwd=&quot;115.66.143.26&quot; dyno= connect= service= status=503 bytes= protocol=https 2022-02-21T01:07:54.988568+00:00 heroku[router]: at=error code=H14 desc=&quot;No web processes running&quot; method=...


python - Unittest causing sys.exit()

No matter what I do sys.exit() is called by unittest, even the most trivial examples. I can't tell if my install is messed up or what is going on. IDLE 1.2.2 ==== No Subprocess ==== &gt;&gt;&gt; import unittest &gt;&gt;&gt; &gt;&gt;&gt; class Test(unittest.TestCase): def testA(self): a = 1 self.assertEqual(a,1) &gt;&gt;&gt; unittest.main() option -n not recognized Usa...


python - Handle sys.exit() in cherrypy service

When you start/stop a python cherrypy service (compiled with py2exe), this works fine When I get a sys.exit() call (from my error handler), cherrypy quits, but the service remains hanging. Code: import cherrypy import win32serviceutil import win32service import sys SERVICE = None class HelloWorld: """ Sample request handler class. """ def __init__(self): self.iVal = ...


linux - How to bypass the 0-255 range limit for sys.exit() in python?

In python (on a Linux system), I'm launching a command using os.system() and retrieving the return code. If that return code is different from 0, I would like to make the program exit with that same return code. So I wrote: ret = os.system(cmd) if ret != 0: print "exit with status %s" % ret sys.exit(ret) When the return code is lower than 256, it works fine, but when it'...


Python sys.exit() help?

I am working in Python and am trying to have a line of code execute and after it executes I am calling sys.exit() to have the script itself "exit." However, it seems that sys.exit() is executing before the line of code above it executes. Below is the code I am trying to implement: if something == True: self.redirect('http://www.google.com/') sys.exit() The...


mocking - How to get around "sys.exit()" in python nosetest?

It seems that python nosetest will quit when encountered sys.exit(), and mocking of this builtin doesn't work.


import - python: Importing scipy.io seems to prevent sys.exit() to work properly

Under Windows, executing the following Python script I get an ERRORLEVEL of 0 instead of the expected 2. import sys import scipy.io sys.exit(2) If I remove the import scipy.io, I got the correct ERRORLEVEL of 2... Any idea why importing scipy.io cause such an issue? PS: windows 7, python 2.72, scipy 0.10.1 Calling help(sys.exit) just before the sys.exit call return...


python - Why are the methods sys.exit(), exit(), raise SystemExit not working?

I need an alternative to kill the python script while inside a thread function. My intention is killing the server when the client enters a 0... Is this not working because the threads haven't been terminated? Here is my code: socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM); print 'Socket created' try: socket.bind((HOST, PORT)) except socket.error, message: print 'Bind statement failed. ...


How to use sys.exit() in Python

player_input = '' # This has to be initialized for the loop while player_input != 0: player_input = str(input('Roll or quit (r or q)')) if player_input == q: # This will break the loop if the player decides to quit print("Now let's see if I can beat your score of", player) break if player_input != r: print('invalid choice, try again') if player_input ==r: roll...


python - Is it possible for a unit test to assert that a method calls sys.exit()?

I have a Python 2.7 method that sometimes calls sys.exit(1) Is it possible to make a unit test that verifies this line of code is called when the right conditions are met?


python - how to continue execution after sys.exit() command

Here i'm reading and comparing values from the two logs using 'for' loop.Problem is i'm not able to continue to next TC after sys.exit command. Let me know if required more clarification f = open('/tmp/ftplog', 'r') for line in f: m = re.findall("5\d+", line) #print m fd = open('/tmp/tellog', 'r') for line in fd: n = re.findall(r"5\d+", line) #prin...






Still can't find your answer? Check out these communities...



PySlackers | Full Stack Python | NHS Python | Pythonist Cafe | Hacker Earth | Discord Python



top