1. import os
  2. import logging
  3. logging.basicConfig(level=logging.ERROR)
  4. def get_env_var(var_name, default_value=None):
  5. """
  6. Retrieves an environment variable with a default value and handles errors.
  7. """
  8. try:
  9. value = os.environ.get(var_name)
  10. if value is None:
  11. return default_value # Return default if not found
  12. return value
  13. except Exception as e:
  14. logging.error(f"Error getting environment variable '{var_name}': {e}")
  15. return default_value
  16. def safe_read_int(var_name, default=None):
  17. """
  18. Reads an integer from an environment variable, handling errors.
  19. """
  20. try:
  21. value = get_env_var(var_name)
  22. if value is None:
  23. return default
  24. return int(value)
  25. except ValueError:
  26. logging.error(f"Invalid integer value for '{var_name}': {get_env_var(var_name)}")
  27. return default
  28. except Exception as e:
  29. logging.error(f"Error reading integer from '{var_name}': {e}")
  30. return default
  31. def safe_read_float(var_name, default=None):
  32. """
  33. Reads a float from an environment variable, handling errors.
  34. """
  35. try:
  36. value = get_env_var(var_name)
  37. if value is None:
  38. return default
  39. return float(value)
  40. except ValueError:
  41. logging.error(f"Invalid float value for '{var_name}': {get_env_var(var_name)}")
  42. return default
  43. except Exception as e:
  44. logging.error(f"Error reading float from '{var_name}': {e}")
  45. return default
  46. def safe_read_list(var_name, default=None):
  47. """
  48. Reads a list from an environment variable, handling errors.
  49. """
  50. try:
  51. value = get_env_var(var_name)
  52. if value is None:
  53. return default
  54. return eval(value) # Use eval cautiously; consider safer alternatives if possible
  55. except (NameError, SyntaxError):
  56. logging.error(f"Invalid list format for '{var_name}': {get_env_var(var_name)}")
  57. return default
  58. except Exception as e:
  59. logging.error(f"Error reading list from '{var_name}': {e}")
  60. return default
  61. if __name__ == '__main__':
  62. # Example Usage
  63. db_host = get_env_var("DB_HOST", "localhost")
  64. port = safe_read_int("PORT", 8080)
  65. api_keys = safe_read_list("API_KEYS", [])
  66. debug_mode = safe_read_int("DEBUG", 0)
  67. print(f"DB Host: {db_host}")
  68. print(f"Port: {port}")
  69. print(f"API Keys: {api_keys}")
  70. print(f"Debug Mode: {debug_mode}")

Add your comment