diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2011-04-08 22:21:18 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2011-04-08 22:21:18 -0400 |
commit | 50f2239ca3c565b28c25b51371c42b569fa05a8c (patch) | |
tree | c0bd675abd1570e7f9517f6271fc666d620d00f6 | |
parent | 4d395ed6ac593efe933909f88dab05def0edcd2e (diff) | |
download | python-coveragepy-git-50f2239ca3c565b28c25b51371c42b569fa05a8c.tar.gz |
Deal more gracefully with unexpectedly-not-python source during reporting.
-rw-r--r-- | coverage/misc.py | 6 | ||||
-rw-r--r-- | coverage/parser.py | 5 | ||||
-rw-r--r-- | coverage/report.py | 4 |
3 files changed, 10 insertions, 5 deletions
diff --git a/coverage/misc.py b/coverage/misc.py index 6cc42c74..4f3748fe 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -113,7 +113,11 @@ class CoverageException(Exception): pass class NoSource(CoverageException): - """Used to indicate we couldn't find the source for a module.""" + """We couldn't find the source for a module.""" + pass + +class NotPython(CoverageException): + """A source file turned out not to be parsable Python.""" pass class ExceptionDuringRun(CoverageException): diff --git a/coverage/parser.py b/coverage/parser.py index 8ad4e051..d033f6d2 100644 --- a/coverage/parser.py +++ b/coverage/parser.py @@ -5,7 +5,8 @@ import glob, opcode, os, re, sys, token, tokenize from coverage.backward import set, sorted, StringIO # pylint: disable=W0622 from coverage.backward import open_source from coverage.bytecode import ByteCodes, CodeObjects -from coverage.misc import nice_pair, CoverageException, NoSource, expensive +from coverage.misc import nice_pair, expensive +from coverage.misc import CoverageException, NoSource, NotPython class CodeParser(object): @@ -316,7 +317,7 @@ class ByteParser(object): self.code = compile(text + '\n', filename, "exec") except SyntaxError: _, synerr, _ = sys.exc_info() - raise CoverageException( + raise NotPython( "Couldn't parse '%s' as Python source: '%s' at line %d" % (filename, synerr.msg, synerr.lineno) ) diff --git a/coverage/report.py b/coverage/report.py index 5e2137f2..6c5510ad 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -2,7 +2,7 @@ import fnmatch, os from coverage.codeunit import code_unit_factory -from coverage.misc import CoverageException, NoSource +from coverage.misc import CoverageException, NoSource, NotPython class Reporter(object): """A base class for all reporters.""" @@ -84,6 +84,6 @@ class Reporter(object): for cu in self.code_units: try: report_fn(cu, self.coverage._analyze(cu)) - except NoSource: + except (NoSource, NotPython): if not self.ignore_errors: raise |