KeyboardInterrupt Exception in Python Explained
KeyboardInterrupt is a Python exception that happens when you stop a running program from the keyboard. In most cases, this means you pressed Ctrl+C in the terminal.
This page explains what KeyboardInterrupt means, when it appears, and how to handle it safely. It is usually not a bug in your code. Instead, it means the program was interrupted by the user.
Quick fix
If you want your program to stop cleanly when the user presses Ctrl+C, wrap the code in a try-except block:
try:
while True:
print("Running...")
except KeyboardInterrupt:
print("\nProgram stopped by user")
Use this when you want to avoid a long traceback and show a friendly exit message instead.
What KeyboardInterrupt means
KeyboardInterrupt is a built-in exception in Python.
It means:
- The program was interrupted from the keyboard
- This usually happens when you press Ctrl+C
- It is not usually caused by a coding mistake
- It often appears when a program is stuck in a loop, waiting for something, or running for a long time
If you are new to exceptions, see Python errors and exceptions explained.
When this exception happens
You may see KeyboardInterrupt in situations like these:
- During an infinite
whileloop - While waiting for user input
- During a long-running task
- While
time.sleep()is pausing the program - When a script is processing a lot of data and you stop it manually
For example, a script may keep running until you interrupt it because it has no normal stop condition. This is common with Python while loops.
Example that causes KeyboardInterrupt
Here is a simple program that keeps running forever:
while True:
print("Still running...")
This loop has no end. If you run it in a terminal, it will continue printing until you stop it.
A common way to stop it is to press Ctrl+C. When you do, Python may show a traceback ending with KeyboardInterrupt.
A more realistic example uses a small delay:
import time
while True:
print("Working...")
time.sleep(1)
Possible output before interruption:
Working...
Working...
Working...
^CTraceback (most recent call last):
...
KeyboardInterrupt
In this example:
while Truecreates an infinite looptime.sleep(1)pauses for 1 second each time- Pressing Ctrl+C interrupts the program while it is running or sleeping
If you want to understand that delay function better, see time.sleep() explained.
How to fix or handle it
KeyboardInterrupt usually does not need a “fix” in the same way as a normal error. Instead, you decide whether the program should:
- Stop immediately
- Stop cleanly with a message
- Save data before exiting
Here are the main ways to handle it.
1. Press Ctrl+C only when you want to stop the program
If you manually interrupted the script, then KeyboardInterrupt is expected.
In that case, nothing may be wrong. You simply stopped the program on purpose.
2. Catch KeyboardInterrupt for a clean exit
Use try-except if you want to show a friendly message instead of a traceback.
try:
while True:
print("Running...")
except KeyboardInterrupt:
print("\nProgram stopped by user")
This is a simple use of exception handling. If you need more help with the syntax, see using try, except, else, and finally in Python.
3. Use a proper loop condition when possible
Infinite loops are sometimes useful, but many programs should stop normally.
Instead of this:
while True:
print("Checking...")
You can often use a condition:
count = 0
while count < 3:
print("Checking...")
count += 1
print("Done")
This version ends by itself and does not need manual interruption.
4. Add a break condition
If you do need while True, add a way to exit the loop.
while True:
text = input("Type quit to stop: ")
if text == "quit":
break
print("You typed:", text)
print("Program ended normally")
This lets the user stop the program without pressing Ctrl+C.
5. Save work before exiting if needed
If your program writes to a file, stores data, or keeps a network connection open, you may want to clean up before exit.
try:
while True:
print("Program is running...")
except KeyboardInterrupt:
print("\nSaving progress before exit...")
For some programs, a clean shutdown is important.
How to exit cleanly
A clean exit means your program stops in a controlled way.
This is helpful when you want to:
- Print a friendly message
- Close files
- Close connections
- Save progress
- Always run cleanup code
Here is a simple example with finally:
try:
print("Program started")
while True:
pass
except KeyboardInterrupt:
print("\nInterrupted by user")
finally:
print("Cleanup code runs before exit")
What this does:
tryruns the main codeexcept KeyboardInterrupthandles Ctrl+Cfinallyruns whether an interruption happens or not
If something must always happen before the program ends, finally is a good choice.
In some programs, you may also choose to exit intentionally with sys.exit(), but that is different from a user pressing Ctrl+C.
Also, avoid catching KeyboardInterrupt and doing nothing unless you have a good reason. Hiding the interruption can make your program harder to stop and harder to debug.
Debugging steps
If you see KeyboardInterrupt and are not sure why, try these steps:
- Check whether you pressed Ctrl+C
- Look for infinite loops
- Check for slow code that seems stuck
- Look for
input()calls waiting for user input - Check for long
sleep()delays - Add
print()statements to see where the program stops
Helpful commands:
python script.py
python -u script.py
python -m pdb script.py
What they do:
python script.pyruns the script normallypython -u script.pyruns Python in unbuffered mode, so output appears immediatelypython -m pdb script.pystarts the Python debugger
If you want more help tracking problems step by step, see the beginner guide to debugging Python code.
KeyboardInterrupt vs other exceptions
KeyboardInterrupt is different from many common Python exceptions.
For example:
KeyboardInterruptusually happens because the user interrupted the programValueErrorhappens when a value has the wrong formRuntimeErrorhappens when a program fails during execution for a different reason
So KeyboardInterrupt is usually about stopping a running script, not about invalid code.
If you are comparing exception types, you may also want to read about RuntimeError in Python.
Common causes
The most common causes are:
- Pressing Ctrl+C while a script is running
- Manually stopping an infinite loop
- Interrupting a long
time.sleep()call - Stopping a script that is waiting for input or network activity
FAQ
Is KeyboardInterrupt an error in my code?
Usually no. It normally means the program was stopped by the user with Ctrl+C.
How do I stop KeyboardInterrupt from showing a traceback?
Catch KeyboardInterrupt with try-except and print your own message before exiting.
try:
while True:
print("Running...")
except KeyboardInterrupt:
print("\nStopped cleanly")
Does KeyboardInterrupt happen only in loops?
No. It can happen during sleep, input, file work, or other long-running operations if you interrupt the program.
Should I always catch KeyboardInterrupt?
Not always. Catch it when you want a clean shutdown or need to save data before exiting.