diff --git a/django/conf/__init__.py b/django/conf/__init__.py index 0177490df94..c24e87e6edc 100644 --- a/django/conf/__init__.py +++ b/django/conf/__init__.py @@ -52,7 +52,7 @@ class LazySettings(object): if not settings_module: # If it's set but is an empty string. raise KeyError except KeyError: - raise EnvironmentError, "Environment variable %s is undefined." % ENVIRONMENT_VARIABLE + raise ImportError, "Environment variable %s is undefined so settings cannot be imported." % ENVIRONMENT_VARIABLE # NOTE: This is arguably an EnvironmentError, but that causes problems with Python's interactive help self._target = Settings(settings_module) @@ -63,7 +63,7 @@ class LazySettings(object): argument must support attribute access (__getattr__)). """ if self._target != None: - raise EnvironmentError, 'Settings already configured.' + raise RuntimeError, 'Settings already configured.' holder = UserSettingsHolder(default_settings) for name, value in options.items(): setattr(holder, name, value) @@ -82,7 +82,7 @@ class Settings(object): try: mod = __import__(self.SETTINGS_MODULE, {}, {}, ['']) except ImportError, e: - raise EnvironmentError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e) + raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e) # Settings that should be converted into tuples if they're mistakenly entered # as strings. diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py index fcbc9d1110d..04591479b33 100644 --- a/django/core/management/__init__.py +++ b/django/core/management/__init__.py @@ -84,7 +84,7 @@ def get_commands(): try: from django.conf import settings apps = settings.INSTALLED_APPS - except (AttributeError, EnvironmentError): + except (AttributeError, ImportError): apps = [] for app_name in apps: @@ -99,7 +99,7 @@ def get_commands(): try: from django.conf import settings project_directory = setup_environ(__import__(settings.SETTINGS_MODULE)) - except (AttributeError, EnvironmentError, ImportError): + except (AttributeError, ImportError): project_directory = None if project_directory: diff --git a/django/newforms/fields.py b/django/newforms/fields.py index 845fb3519a2..58f65ffde5c 100644 --- a/django/newforms/fields.py +++ b/django/newforms/fields.py @@ -409,7 +409,7 @@ class EmailField(RegexField): try: from django.conf import settings URL_VALIDATOR_USER_AGENT = settings.URL_VALIDATOR_USER_AGENT -except (ImportError, EnvironmentError): +except ImportError: # It's OK if Django settings aren't configured. URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)' diff --git a/docs/settings.txt b/docs/settings.txt index 79de2ad22f9..3157a91dc36 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -1166,12 +1166,12 @@ If you're not setting the ``DJANGO_SETTINGS_MODULE`` environment variable, you settings. If you don't set ``DJANGO_SETTINGS_MODULE`` and don't call ``configure()``, -Django will raise an ``EnvironmentError`` exception the first time a setting +Django will raise an ``ImportError`` exception the first time a setting is accessed. If you set ``DJANGO_SETTINGS_MODULE``, access settings values somehow, *then* -call ``configure()``, Django will raise an ``EnvironmentError`` saying settings -have already been configured. +call ``configure()``, Django will raise a ``RuntimeError`` indicating +that settings have already been configured. Also, it's an error to call ``configure()`` more than once, or to call ``configure()`` after any setting has been accessed.