Make run_wsgi.py python3 compliant
Changes include:
 - Add __future__ for python2
 - Set "ascii" encoding for TemplateLookup
 - Remove text option for error handling (header is already set to HTML)
 - Break apart exception handling for clarity
 - Check that a file exists before opening it
 - Use `open` not `file` with 'rb' flags
 - Remove unnessary "default" `extensions_map`
 - Python3 style print statement
diff --git a/examples/wsgi/run_wsgi.py b/examples/wsgi/run_wsgi.py
index 6e86406..13d689b 100644
--- a/examples/wsgi/run_wsgi.py
+++ b/examples/wsgi/run_wsgi.py
@@ -1,14 +1,25 @@
 #!/usr/bin/python
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
 import cgi, re, os, posixpath, mimetypes
 from mako.lookup import TemplateLookup
 from mako import exceptions
 
 root = './'
 port = 8000
-error_style = 'html' # select 'text' for plaintext error reporting
 
-lookup = TemplateLookup(directories=[root + 'templates', root + 'htdocs'], filesystem_checks=True, module_directory='./modules')
+lookup = TemplateLookup(
+             directories=[root + 'templates', root + 'htdocs'],
+             filesystem_checks=True,
+             module_directory='./modules',
+             # even better would be to use 'charset' in start_response
+             output_encoding='ascii',
+             ending_errors='replace'
+         )
 
 def serve(environ, start_response):
     """serves requests using the WSGI callable interface."""
@@ -28,23 +39,25 @@
     if re.match(r'.*\.html$', uri):
         try:
             template = lookup.get_template(uri)
-            start_response("200 OK", [('Content-type','text/html')])
-            return [template.render(**d)]
         except exceptions.TopLevelLookupException:
             start_response("404 Not Found", [])
-            return ["Cant find template '%s'" % uri]
+            return [str.encode("Cant find template '%s'" % uri)]
+
+        start_response("200 OK", [('Content-type','text/html')])
+
+        try:
+            return [template.render(**d)]
         except:
-            if error_style == 'text':
-                start_response("200 OK", [('Content-type','text/plain')])
-                return [exceptions.text_error_template().render()]
-            else:
-                start_response("200 OK", [('Content-type','text/html')])
-                return [exceptions.html_error_template().render()]
+            return [exceptions.html_error_template().render()]
     else:
         u = re.sub(r'^\/+', '', uri)
         filename = os.path.join(root, u)
-        start_response("200 OK", [('Content-type',guess_type(uri))])
-        return [file(filename).read()]
+        if os.path.isfile(filename):
+            start_response("200 OK", [('Content-type',guess_type(uri))])
+            return [open(filename, 'rb').read()]
+        else:
+            start_response("404 Not Found", [])
+            return [str.encode("File not found: '%s'" % filename)]
  
 def getfield(f):
     """convert values from cgi.Field objects to plain values."""
@@ -54,9 +67,6 @@
         return f.value
 
 extensions_map = mimetypes.types_map.copy()
-extensions_map.update({
-'': 'text/html', # Default
-})
 
 def guess_type(path):
     """return a mimetype for the given path based on file extension."""
@@ -67,12 +77,10 @@
     if ext in extensions_map:
         return extensions_map[ext]
     else:
-        return extensions_map['']
+        return 'text/html'
  
 if __name__ == '__main__':
     import wsgiref.simple_server
     server = wsgiref.simple_server.make_server('', port, serve)
-    print "Server listening on port %d" % port
+    print("Server listening on port %d" % port)
     server.serve_forever()
-
-