Index: /src/python/trunk/Lib/idlelib/PyShell.py =================================================================== --- /src/python/trunk/Lib/idlelib/PyShell.py (revision 66617) +++ /src/python/trunk/Lib/idlelib/PyShell.py (working copy) @@ -55,18 +55,24 @@ except ImportError: pass else: - def idle_showwarning(message, category, filename, lineno): - file = warning_stream + def idle_showwarning(message, category, filename, lineno, + file=None, line=None): + complaint = warnings.formatwarning(message, category, filename, + lineno, line) + if file is None: + file = warning_stream try: - file.write(warnings.formatwarning(message, category, filename, lineno)) + file.write(complaint) except IOError: pass ## file (probably __stderr__) is invalid, warning dropped. warnings.showwarning = idle_showwarning - def idle_formatwarning(message, category, filename, lineno): + def idle_formatwarning(message, category, filename, lineno, line=None): """Format warnings the IDLE way""" s = "\nWarning (from warnings module):\n" s += ' File \"%s\", line %s\n' % (filename, lineno) - line = linecache.getline(filename, lineno).strip() + if line is None: + line = linecache.getline(filename, lineno) + line = line.strip() if line: s += " %s\n" % line s += "%s: %s\n>>> " % (category.__name__, message) @@ -87,10 +93,10 @@ """ cache = linecache.cache save = {} - for filename in cache.keys(): - if filename[:1] + filename[-1:] == '<>': - save[filename] = cache[filename] - orig_checkcache() + for file_name in cache.keys(): + if file_name[:1] + file_name[-1:] == '<>': + save[file_name] = cache[file_name] + orig_checkcache(filename) cache.update(save) # Patch linecache.checkcache(): Index: /src/python/trunk/Lib/idlelib/run.py =================================================================== --- /src/python/trunk/Lib/idlelib/run.py (revision 66617) +++ /src/python/trunk/Lib/idlelib/run.py (working copy) @@ -24,11 +24,14 @@ except ImportError: pass else: - def idle_formatwarning_subproc(message, category, filename, lineno): + def idle_formatwarning_subproc(message, category, filename, lineno, + line=None): """Format warnings the IDLE way""" s = "\nWarning (from warnings module):\n" s += ' File \"%s\", line %s\n' % (filename, lineno) - line = linecache.getline(filename, lineno).strip() + if line is None: + line = linecache.getline(filename, lineno) + line = line.strip() if line: s += " %s\n" % line s += "%s: %s\n" % (category.__name__, message) Index: /src/python/trunk/Lib/warnings.py =================================================================== --- /src/python/trunk/Lib/warnings.py (revision 66617) +++ /src/python/trunk/Lib/warnings.py (working copy) @@ -25,8 +25,9 @@ """Hook to write a warning to a file; replace if you like.""" if file is None: file = sys.stderr + complaint = formatwarning(message, category, filename, lineno, line) try: - file.write(formatwarning(message, category, filename, lineno, line)) + file.write(complaint) except IOError: pass # the file (probably stderr) is invalid - this warning gets lost. # Keep a worrking version around in case the deprecation of the old API is @@ -36,9 +37,10 @@ def formatwarning(message, category, filename, lineno, line=None): """Function to format a warning the standard way.""" s = "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message) - line = linecache.getline(filename, lineno) if line is None else line + if line is None: + line = linecache.getline(filename, lineno) + line = line.strip() if line: - line = line.strip() s += " %s\n" % line return s