VOOZH about

URL: https://www.geeksforgeeks.org/python/blockingioerror-python/

⇱ BlockingIOError - Python - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

BlockingIOError - Python

Last Updated : 10 Mar, 2025

BlockingIOError is an exception that occurs when an I/O operation on a non-blocking object would normally block and it is a subclass of OSError. Commonly encountered with non-blocking sockets or file operations, this exception is raised when an I/O operation cannot be completed immediately. It plays a crucial role in asynchronous or event-driven programming by allowing developers to gracefully handle operations that need to be retried later. Let’s understand with the help of an example:


Output
Operation would block, try again later.
Socket closed.

Explanation: If the connection cannot be established immediately then a BlockingIOError is raised and the output will be as shown above but if the connection succeeds instantly (unlikely for a non-blocking socket) only "Socket closed." will be printed.

Handling BlockingIOError

To handle a BlockingIOError, use a try-except block and catch the error using the BlockingIOError keyword. This error occurs when reading from or writing to a non-blocking resource with no available data. You can handle it by retrying the operation or logging the issue.

Syntax

try:
# Non-blocking I/O operation that may raise BlockingIOError
except BlockingIOError:
# Code to handle the situation when the operation would block
finally:
# Cleanup code that executes regardless of exceptions

Parameters: BlockingIOError is raised without user-supplied parameters however, it carries attributes like errno and strerror that provide details about the error.
Return : As an exception, it does not return a value.

Example:

When reading from a file opened in non-blocking mode, if no data is immediately available then a BlockingIOError may be raised. Handling this exception allows your program to decide whether to retry the operation later.

The output of this code depends on whether the file data.txt has data available for reading or not.

Case 1 - Data is available in data.txt : If data.txt exists and contains some text (e.g., "Hello, world!") then the output will be:

Hello, world!
File descriptor closed.

Case 2 - No data is available yet (Non-blocking mode): If the file exists but no data is available at the moment (common in special files like pipes or sockets), a BlockingIOError is raised and the output will be:

No data available yet, try again later.
File descriptor closed.
Comment
Article Tags: