Commit 9464a7de authored by Guido van Rossum's avatar Guido van Rossum

- Added keyword argument 'append' to filterwarnings(); if true, this

  appends to list of filters instead of inserting at the front.  This
  is useful to add a filter with a lower priority than -W options.

- Cosmetic improvements to a docstring and an error message.
parent 8373218e
...@@ -85,7 +85,7 @@ def showwarning(message, category, filename, lineno, file=None): ...@@ -85,7 +85,7 @@ def showwarning(message, category, filename, lineno, file=None):
file.write(formatwarning(message, category, filename, lineno)) file.write(formatwarning(message, category, filename, lineno))
def formatwarning(message, category, filename, lineno): def formatwarning(message, category, filename, lineno):
"""Hook to format a warning the standard way.""" """Function to format a warning the standard way."""
import linecache import linecache
s = "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message) s = "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message)
line = linecache.getline(filename, lineno).strip() line = linecache.getline(filename, lineno).strip()
...@@ -93,7 +93,8 @@ def formatwarning(message, category, filename, lineno): ...@@ -93,7 +93,8 @@ def formatwarning(message, category, filename, lineno):
s = s + " " + line + "\n" s = s + " " + line + "\n"
return s return s
def filterwarnings(action, message="", category=Warning, module="", lineno=0): def filterwarnings(action, message="", category=Warning, module="", lineno=0,
append=0):
"""Insert an entry into the list of warnings filters (at the front). """Insert an entry into the list of warnings filters (at the front).
Use assertions to check that all arguments have the right type.""" Use assertions to check that all arguments have the right type."""
...@@ -105,8 +106,12 @@ def filterwarnings(action, message="", category=Warning, module="", lineno=0): ...@@ -105,8 +106,12 @@ def filterwarnings(action, message="", category=Warning, module="", lineno=0):
assert type(module) is types.StringType, "module must be a string" assert type(module) is types.StringType, "module must be a string"
assert type(lineno) is types.IntType and lineno >= 0, \ assert type(lineno) is types.IntType and lineno >= 0, \
"lineno must be an int >= 0" "lineno must be an int >= 0"
filters.insert(0, (action, re.compile(message, re.I), category, item = (action, re.compile(message, re.I), category,
re.compile(module), lineno)) re.compile(module), lineno)
if append:
filters.append(item)
else:
filters.insert(0, item)
def resetwarnings(): def resetwarnings():
"""Reset the list of warnings filters to its default state.""" """Reset the list of warnings filters to its default state."""
...@@ -128,7 +133,7 @@ def _processoptions(args): ...@@ -128,7 +133,7 @@ def _processoptions(args):
def _setoption(arg): def _setoption(arg):
parts = arg.split(':') parts = arg.split(':')
if len(parts) > 5: if len(parts) > 5:
raise _OptionError("unparsable -W option %s" % `arg`) raise _OptionError("too many fields (max 5): %s" % `arg`)
while len(parts) < 5: while len(parts) < 5:
parts.append('') parts.append('')
action, message, category, module, lineno = [s.strip() action, message, category, module, lineno = [s.strip()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment