import os
import logging
logging.basicConfig(level=logging.ERROR)
def get_env_var(var_name, default_value=None):
"""
Retrieves an environment variable with a default value and handles errors.
"""
try:
value = os.environ.get(var_name)
if value is None:
return default_value # Return default if not found
return value
except Exception as e:
logging.error(f"Error getting environment variable '{var_name}': {e}")
return default_value
def safe_read_int(var_name, default=None):
"""
Reads an integer from an environment variable, handling errors.
"""
try:
value = get_env_var(var_name)
if value is None:
return default
return int(value)
except ValueError:
logging.error(f"Invalid integer value for '{var_name}': {get_env_var(var_name)}")
return default
except Exception as e:
logging.error(f"Error reading integer from '{var_name}': {e}")
return default
def safe_read_float(var_name, default=None):
"""
Reads a float from an environment variable, handling errors.
"""
try:
value = get_env_var(var_name)
if value is None:
return default
return float(value)
except ValueError:
logging.error(f"Invalid float value for '{var_name}': {get_env_var(var_name)}")
return default
except Exception as e:
logging.error(f"Error reading float from '{var_name}': {e}")
return default
def safe_read_list(var_name, default=None):
"""
Reads a list from an environment variable, handling errors.
"""
try:
value = get_env_var(var_name)
if value is None:
return default
return eval(value) # Use eval cautiously; consider safer alternatives if possible
except (NameError, SyntaxError):
logging.error(f"Invalid list format for '{var_name}': {get_env_var(var_name)}")
return default
except Exception as e:
logging.error(f"Error reading list from '{var_name}': {e}")
return default
if __name__ == '__main__':
# Example Usage
db_host = get_env_var("DB_HOST", "localhost")
port = safe_read_int("PORT", 8080)
api_keys = safe_read_list("API_KEYS", [])
debug_mode = safe_read_int("DEBUG", 0)
print(f"DB Host: {db_host}")
print(f"Port: {port}")
print(f"API Keys: {api_keys}")
print(f"Debug Mode: {debug_mode}")
Add your comment