diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index e69f27660f..8eea31b0db 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -11,6 +11,10 @@ gettext_noop = lambda s: s
 
 DEBUG = False
 TEMPLATE_DEBUG = False
+# True if BaseHandler.get_response() should propagate raw exceptions
+# rather than catching them.  This is useful under some testing siutations,
+# and should never be used on a live site.
+DEBUG_PROPAGATE_EXCEPTIONS = False
 
 # Whether to use the "Etag" header. This saves bandwidth but slows down performance.
 USE_ETAGS = False
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index a81bec322f..1fdd7c3d6b 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -115,7 +115,10 @@ class BaseHandler(object):
             # Get the exception info now, in case another exception is thrown later.
             exc_info = sys.exc_info()
             receivers = dispatcher.send(signal=signals.got_request_exception, request=request)
-            if settings.DEBUG:
+
+            if settings.DEBUG_PROPAGATE_EXCEPTIONS:
+                raise
+            elif settings.DEBUG:
                 from django.views import debug
                 return debug.technical_500_response(request, *exc_info)
             else:
diff --git a/docs/settings.txt b/docs/settings.txt
index 5aee19102b..5f1804fb80 100644
--- a/docs/settings.txt
+++ b/docs/settings.txt
@@ -391,6 +391,16 @@ are inappropriate for public consumption. File paths, configuration options, and
 the like all give attackers extra information about your server. Never deploy a
 site with ``DEBUG`` turned on.
 
+DEBUG_PROPAGATE_EXCEPTIONS
+--------------------
+
+Default: ``False``
+
+If set to True, Django's normal exception handling of view functions
+will be suppressed, and exceptions will propagate upwards.  This can
+be useful for some test setups, and should never be used on a live
+site.
+
 DEFAULT_CHARSET
 ---------------