SeleniumHQ/selenium · error · TypeError
{__class__.__name__}.__init__() got an invalid version: '{ve
Error message
{__class__.__name__}.__init__() got an invalid version: '{version}' What it means
Raised as TypeError by the Server.version setter when the version string does not match the regex pattern ^\d+\.\d+\.\d+$ (exactly three dot-separated numeric components). This enforces semantic-version-like format for Selenium Grid downloads. Versions like '4.20' or 'latest' or '4.20.0-rc1' will be rejected.
Source
Thrown at py/selenium/webdriver/remote/server.py:125
@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
@log_level.setter
def log_level(self, log_level):
levels = ("SEVERE", "WARNING", "INFO", "CONFIG", "FINE", "FINER", "FINEST")
if log_level not in levels:
raise TypeError(f"log_level must be one of: {', '.join(levels)}")
self._log_level = log_level
@property
def env(self):
return self._env
@env.setterView on GitHub (pinned to aa36b38e69)
Solutions
- Use the full three-component version: Server(version='4.20.0')
- Remove any 'v' prefix or pre-release suffix from the version string
- If using a snapshot/RC build, download the jar manually and use the path parameter instead
Example fix
// before server = Server(version='4.20') # or server = Server(version='v4.20.0') // after server = Server(version='4.20.0')
Defensive patterns
Strategy: validation
Validate before calling
import re
version = '4.20'
if not re.match(r'^\d+\.\d+\.\d+$', str(version)):
version = version + '.0' if version.count('.') == 1 else None
server = Server(version=version) Type guard
import re
def is_valid_version(v) -> bool:
return bool(re.match(r'^\d+\.\d+\.\d+$', str(v))) Try / catch
try:
server = Server(version=version)
except TypeError:
# fall back to local jar or latest known good version
server = Server(path='/opt/selenium-server.jar') Prevention
- Always use full X.Y.Z three-component version strings
- Remove 'v' prefixes and pre-release suffixes
- If using non-standard versions, download the jar manually and use path instead
When it happens
Trigger: Calling Server(version='4.20'), Server(version='latest'), Server(version='4.20.0-rc1'), or Server(version='v4.20.0') triggers the TypeError. Only exact X.Y.Z format is accepted.
Common situations: Passing a short version like '4.20' instead of '4.20.0'. Including a 'v' prefix. Using pre-release qualifiers like '-rc1'. Passing 'latest' or a milestone tag.
Related errors
- Not allowed to specify a version when using an existing serv
- {__class__.__name__}.__init__() got an invalid port: '{port}
- Invalid URL: ${aUrl}
- Can't find server .jar located at {path}
- port must be 0-65535
AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14).
Data as JSON: /api/errors/cd6cd0e492532cff.
Report an issue: GitHub.