{"id":"efd9347ba1d420e6","repo":"pypa/pip","slug":"post-must-be-non-negative-integer-got-value","errorCode":null,"errorMessage":"post must be non-negative integer, got {value}","messagePattern":"post must be non-negative integer, got (.+?)","errorType":"validation","errorClass":"InvalidVersion","httpStatus":null,"severity":"error","filePath":"src/pip/_vendor/packaging/version.py","lineNumber":305,"sourceCode":"    if value is None:\n        return value\n    if isinstance(value, tuple) and len(value) == 2:\n        letter, number = value\n        letter = normalize_pre(letter)\n        if letter in {\"a\", \"b\", \"rc\"} and isinstance(number, int) and number >= 0:\n            # type checkers can't infer the Literal type here on letter\n            return (letter, number)  # type: ignore[return-value]\n    msg = f\"pre must be a tuple of ('a'|'b'|'rc', non-negative int), got {value}\"\n    raise InvalidVersion(msg)\n\n\ndef _validate_post(value: object, /) -> tuple[Literal[\"post\"], int] | None:\n    if value is None:\n        return value\n    if isinstance(value, int) and value >= 0:\n        return (\"post\", value)\n    msg = f\"post must be non-negative integer, got {value}\"\n    raise InvalidVersion(msg)\n\n\ndef _validate_dev(value: object, /) -> tuple[Literal[\"dev\"], int] | None:\n    if value is None:\n        return value\n    if isinstance(value, int) and value >= 0:\n        return (\"dev\", value)\n    msg = f\"dev must be non-negative integer, got {value}\"\n    raise InvalidVersion(msg)\n\n\ndef _validate_local(value: object, /) -> LocalType | None:\n    if value is None:\n        return value\n    if isinstance(value, str) and _LOCAL_PATTERN.fullmatch(value):\n        return _parse_local_version(value)\n    msg = f\"local must be a valid version string, got {value!r}\"\n    raise InvalidVersion(msg)","sourceCodeStart":287,"sourceCodeEnd":323,"githubUrl":"https://github.com/pypa/pip/blob/d7d0d0a39494e28ec1c407bd0680e4a4d1067791/src/pip/_vendor/packaging/version.py#L287-L323","documentation":"Raised by `_validate_post(value)` when the `post` argument to `Version.from_parts`/`__replace__` is not `None` and not a non-negative `int`. The post-release number in PEP 440 (`1.0.post1`) is a single non-negative integer; floats, strings, lists, and negatives are rejected. The validator wraps the int into `('post', value)` internally.","triggerScenarios":"`Version.from_parts(release=(1,0), post='1')`, `post=-1`, `post=1.5`, `post=[1]`. Check is `isinstance(value, int) and value >= 0`.","commonSituations":"Passing the post number as a string from config; a negative value from a buggy default; a float from arithmetic.","solutions":["Pass a non-negative `int`: `post=1`.","Coerce with `int(value)` and assert `>= 0` first.","For string input, use `Version('1.0.post1')`.","Omit `post` (`None`) if there is no post-release segment."],"exampleFix":"// before\nVersion.from_parts(release=(1, 0), post='1')  # str -> raises\n\n// after\nVersion.from_parts(release=(1, 0), post=int('1'))\n# or\nVersion('1.0.post1')","handlingStrategy":"type-guard","validationCode":"def is_valid_post(value: object) -> bool:\n    return value is None or (isinstance(value, int) and not isinstance(value, bool) and value >= 0)","typeGuard":"def is_non_negative_int_or_none(value: object) -> bool:\n    return value is None or (isinstance(value, int) and not isinstance(value, bool) and value >= 0)","tryCatchPattern":"from pip._vendor.packaging.version import Version, InvalidVersion\n\ntry:\n    v = Version.from_parts(release=release, post=post)\nexcept InvalidVersion as e:\n    if 'post' in str(e):\n        post = int(post)\n        v = Version.from_parts(release=release, post=post)\n    raise","preventionTips":["Pass `post` as a non-negative `int` or `None`.","Coerce strings with `int()` and validate `>= 0` before calling.","For string input, prefer `Version('1.0.post1')`."],"tags":["python","packaging","version","pep440","validation","from-parts","post-release"],"analyzedSha":"d7d0d0a39494e28ec1c407bd0680e4a4d1067791","analyzedAt":"2026-08-04T20:55:04.259Z","schemaVersion":2}