]> granicus.if.org Git - python/commitdiff
Also look up variable names in __builtins__ if not found in globals.
authorKa-Ping Yee <ping@zesty.ca>
Wed, 26 Jun 2002 07:10:56 +0000 (07:10 +0000)
committerKa-Ping Yee <ping@zesty.ca>
Wed, 26 Jun 2002 07:10:56 +0000 (07:10 +0000)
Don't show hidden fields of exception values (names starting with '_').

Lib/cgitb.py

index 381fb7b8e7ded67f78b6cc348d2954b467a54600..b39fd936efab02bc7955543eadd3a833b1c38191 100644 (file)
@@ -42,6 +42,14 @@ def lookup(name, frame, locals):
         return 'local', locals[name]
     if name in frame.f_globals:
         return 'global', frame.f_globals[name]
+    if '__builtins__' in frame.f_globals:
+        builtins = frame.f_globals['__builtins__']
+        if type(builtins) is type({}):
+            if name in builtins:
+                return 'builtin', builtins[name]
+        else:
+            if hasattr(builtins, name):
+                return 'builtin', getattr(builtins, name)
     return None, __UNDEF__
 
 def scanvars(reader, frame, locals):
@@ -118,9 +126,12 @@ function calls leading up to the error, in the order they occurred.'''
             if name in done: continue
             done[name] = 1
             if value is not __UNDEF__:
-                if where == 'global': name = '<em>global</em> ' + strong(name)
-                elif where == 'local': name = strong(name)
-                else: name = where + strong(name.split('.')[-1])
+                if where in ['global', 'builtin']:
+                    name = ('<em>%s</em> ' % where) + strong(name)
+                elif where == 'local':
+                    name = strong(name)
+                else:
+                    name = where + strong(name.split('.')[-1])
                 dump.append('%s&nbsp;= %s' % (name, pydoc.html.repr(value)))
             else:
                 dump.append(name + ' <em>undefined</em>')
@@ -133,6 +144,7 @@ function calls leading up to the error, in the order they occurred.'''
     exception = ['<p>%s: %s' % (strong(str(etype)), str(evalue))]
     if type(evalue) is types.InstanceType:
         for name in dir(evalue):
+            if name[:1] == '_': continue
             value = pydoc.html.repr(getattr(evalue, name))
             exception.append('\n<br>%s%s&nbsp;=\n%s' % (indent, name, value))