{"id":966,"library":"validators","title":"Validators","description":"Validators is a lightweight Python library designed for human-friendly data validation without the need for complex schemas or forms. It provides a wide array of simple functions to validate common data types such as email addresses, URLs, IP addresses, and more. On success, validator functions return `True`; on failure, they return a `ValidationFailure` object. The library is actively maintained, with frequent updates to add new validators and improve existing ones.","status":"active","version":"0.35.0","language":"python","source_language":"en","source_url":"https://github.com/python-validators/validators","tags":["data validation","email validation","url validation","ip address validation","lightweight","schema-less"],"install":[{"cmd":"pip install validators","lang":"bash","label":"Install latest version"}],"dependencies":[{"reason":"Requires Python 3.9 or newer.","package":"python","optional":false}],"imports":[{"note":"All validator functions are directly accessible as attributes of the imported 'validators' module (e.g., validators.email()).","symbol":"validators","correct":"import validators"}],"quickstart":{"code":"import validators\n\nemail_to_check = \"test@example.com\"\nis_valid_email = validators.email(email_to_check)\n\nif is_valid_email:\n    print(f\"'{email_to_check}' is a valid email address.\")\nelse:\n    # ValidationFailure objects evaluate to False in a boolean context\n    print(f\"'{email_to_check}' is not a valid email address. Reason: {is_valid_email.message}\")\n\nurl_to_check = \"http://invalid.domain\"\nis_valid_url = validators.url(url_to_check)\n\nif is_valid_url:\n    print(f\"'{url_to_check}' is a valid URL.\")\nelse:\n    print(f\"'{url_to_check}' is an invalid URL. Reason: {is_valid_url.message}\")","lang":"python","description":"Demonstrates basic usage of `validators.email` and `validators.url`, and how to handle `ValidationFailure` objects."},"warnings":[{"fix":"Upgrade Python to 3.9+ or pin `validators` to `<0.35.0`.","message":"Version 0.35.0 dropped support for Python 3.8. Users on Python 3.8 or older must upgrade their Python version or use an older `validators` release.","severity":"breaking","affected_versions":"0.35.0+"},{"fix":"Update your code to use `validators.crypto_addresses.btc_address`.","message":"The `btc_address` validator was moved to the `crypto_addresses` submodule. Direct imports or calls to `validators.btc_address` will fail.","severity":"breaking","affected_versions":"0.29.0+"},{"fix":"Check the result in a boolean context (`if result:`) or inspect the `ValidationFailure` object's attributes for details (`if not result: print(result.message)`).","message":"Validator functions return `True` on success or a `ValidationFailure` object on failure. While `ValidationFailure` objects correctly evaluate to `False` in a boolean context, they are not `False` themselves. Access specific error details via attributes like `failure_object.message`, `failure_object.value`, etc.","severity":"gotcha","affected_versions":"All"},{"fix":"Double-check `pip install validators` and `import validators` to confirm you are using this specific library.","message":"Be mindful of similarly named but distinct libraries like `validator` (for request validation with schema rules) and `validator-collection` (another collection of validation functions with a different API). Ensure you are installing and importing the correct `validators` library.","severity":"gotcha","affected_versions":"All"}],"env_vars":null,"last_verified":"2026-05-12T21:48:47.263Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"pip install validators","cause":"The 'validators' library has not been installed in the current Python environment.","error":"ModuleNotFoundError: No module named 'validators'"},{"fix":"Use the correct function name provided by the library, for example, `validators.email()` for email validation.","cause":"An attempt was made to call a validator function using an incorrect or non-existent name.","error":"AttributeError: module 'validators' has no attribute 'mail'"},{"fix":"Pass the string value you intend to validate as an argument to the function, e.g., `validators.email('test@example.com')`.","cause":"A validator function was called without providing the required string argument to be validated.","error":"TypeError: email() missing 1 required positional argument: 'email_address'"},{"fix":"Always check if the result is `False` (or specifically an instance of `ValidationFailure`) before attempting to access its attributes:\n```python\nimport validators\nresult = validators.email('test@example.com')\nif not result: # This implicitly checks for ValidationFailure\n    print(f\"Validation failed: {result.reason}\")\nelse:\n    print(\"Validation succeeded!\")\n```","cause":"The `validators` functions return `True` on successful validation. If validation succeeds, the result is a boolean `True`, not a `ValidationFailure` object, so attempting to access attributes like `reason` (which exist only on `ValidationFailure` objects) will raise an `AttributeError`.","error":"AttributeError: 'bool' object has no attribute 'reason'"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"0.35.0","cli_name":"","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","installed_version":"0.35.0","pypi_latest":"0.35.0","is_stale":false,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.06,"mem_mb":2.8,"disk_size":"18.1M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.06,"mem_mb":2.8,"disk_size":"18.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.04,"mem_mb":2.8,"disk_size":"19M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":2.8,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.09,"mem_mb":2.7,"disk_size":"20.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.11,"mem_mb":2.7,"disk_size":"20.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.08,"mem_mb":2.7,"disk_size":"20M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.08,"mem_mb":2.7,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.08,"mem_mb":2.8,"disk_size":"11.9M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.08,"mem_mb":2.8,"disk_size":"11.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.08,"mem_mb":2.8,"disk_size":"12M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.08,"mem_mb":2.8,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.07,"mem_mb":3,"disk_size":"11.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.08,"mem_mb":3,"disk_size":"11.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.07,"mem_mb":2.8,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.08,"mem_mb":2.8,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.06,"mem_mb":2.7,"disk_size":"17.6M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.06,"mem_mb":2.7,"disk_size":"17.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.05,"mem_mb":2.7,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"validators","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":2.7,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}