python/cpython · error · ValueError

Invalid file object: {fd!r}

Error message

Invalid file object: {fd!r}

What it means

Error "Invalid file object: {fd!r}" thrown in python/cpython.

Source

Thrown at Lib/asyncio/selector_events.py:275

                context = {
                    'message':
                        'Error on transport creation for incoming connection',
                    'exception': exc,
                }
                if protocol is not None:
                    context['protocol'] = protocol
                if transport is not None:
                    context['transport'] = transport
                self.call_exception_handler(context)

    def _ensure_fd_no_transport(self, fd):
        fileno = fd
        if not isinstance(fileno, int):
            try:
                fileno = int(fileno.fileno())
            except (AttributeError, TypeError, ValueError):
                # This code matches selectors._fileobj_to_fd function.
                raise ValueError(f"Invalid file object: {fd!r}") from None
        transport = self._transports.get(fileno)
        if transport and not transport.is_closing():
            raise RuntimeError(
                f'File descriptor {fd!r} is used by transport '
                f'{transport!r}')

    def _add_reader(self, fd, callback, *args, context=None):
        self._check_closed()
        handle = events.Handle(callback, args, self, context=context)
        key = self._selector.get_map().get(fd)
        if key is None:
            self._selector.register(fd, selectors.EVENT_READ,
                                    (handle, None))
        else:
            mask, (reader, writer) = key.events, key.data
            self._selector.modify(fd, mask | selectors.EVENT_READ,
                                  (handle, writer))
            if reader is not None:

View on GitHub (pinned to bc6749cc3b)

Solutions

  1. Pass a valid file object or file descriptor to add_reader()/add_writer(); ensure it has a fileno() returning a valid integer and is not closed.

When it happens

Trigger: Raised when an object without a valid fileno is registered with the selector event loop.

Common situations: See trigger scenarios.


AI-assisted analysis of python/cpython@bc6749cc3b (2026-08-14). Data as JSON: /api/errors/bfa0d633aa7174ca. Report an issue: GitHub.