SeleniumHQ/selenium · error · TypeError

{__class__.__name__}.__init__() got an invalid port: '{port}

Error message

{__class__.__name__}.__init__() got an invalid port: '{port}'

What it means

Raised as TypeError by the Server.port setter when int(port) raises ValueError — i.e., the port value cannot be converted to an integer. This catches non-numeric strings and other unconvertible types before they reach the range check. Note: the original ValueError from int() is caught and re-raised as TypeError.

Source

Thrown at py/selenium/webdriver/remote/server.py:112

    def path(self):
        return self._path

    @path.setter
    def path(self, path):
        if path and not os.path.exists(path):
            raise OSError(f"Can't find server .jar located at {path}")
        self._path = path

    @property
    def port(self):
        return self._port

    @port.setter
    def port(self, port):
        try:
            port = int(port)
        except ValueError:
            raise TypeError(f"{__class__.__name__}.__init__() got an invalid port: '{port}'")
        if not (0 <= port <= 65535):
            raise ValueError("port must be 0-65535")
        self._port = port

    @property
    def version(self):
        return self._version

    @version.setter
    def version(self, version):
        if version:
            if not re.match(r"^\d+\.\d+\.\d+$", str(version)):
                raise TypeError(f"{__class__.__name__}.__init__() got an invalid version: '{version}'")
        self._version = version

    @property
    def log_level(self):
        return self._log_level

View on GitHub (pinned to aa36b38e69)

Solutions

  1. Ensure the port is an integer or a numeric string: Server(port=4444) or Server(port='4444')
  2. Validate env-sourced ports: port = int(os.environ.get('SELENIUM_PORT', '4444'))
  3. Strip any non-numeric characters from the port string before passing

Example fix

// before
server = Server(port=os.environ.get('PORT', 'abc'))

// after
port_str = os.environ.get('PORT', '4444')
server = Server(port=int(port_str))
Defensive patterns

Strategy: validation

Validate before calling

port_str = os.environ.get('PORT', '4444')
port = int(port_str)  # raises ValueError here if non-numeric, before reaching Server
server = Server(port=port)

Type guard

def is_intable(v) -> bool:
    try:
        int(v)
        return True
    except (ValueError, TypeError):
        return False

Try / catch

try:
    server = Server(port=port_value)
except TypeError:
    server = Server(port=4444)  # fallback to default

Prevention

When it happens

Trigger: Calling Server(port='abc'), Server(port='4444a'), or Server(port=None) (if None reaches the setter) triggers the TypeError. Any value that int() cannot parse will fail here.

Common situations: Port values read from environment variables or config files as strings that are not numeric. Typos in port configuration. Accidentally passing a hostname:port string instead of just the port number.

Related errors


AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14). Data as JSON: /api/errors/f40086187d759415. Report an issue: GitHub.