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_levelView on GitHub (pinned to aa36b38e69)
Solutions
- Ensure the port is an integer or a numeric string: Server(port=4444) or Server(port='4444')
- Validate env-sourced ports: port = int(os.environ.get('SELENIUM_PORT', '4444'))
- 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
- Convert port config values to int explicitly before passing
- Validate env-sourced port strings are numeric
- Strip non-numeric characters from port configuration
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
- Not allowed to specify a version when using an existing serv
- port must be 0-65535
- {__class__.__name__}.__init__() got an invalid version: '{ve
- Can't find server .jar located at {path}
- Argument to isShown must be of type Element
AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14).
Data as JSON: /api/errors/f40086187d759415.
Report an issue: GitHub.