From 50f2239ca3c565b28c25b51371c42b569fa05a8c Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Fri, 8 Apr 2011 22:21:18 -0400 Subject: Deal more gracefully with unexpectedly-not-python source during reporting. --- coverage/misc.py | 6 +++++- coverage/parser.py | 5 +++-- coverage/report.py | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) (limited to 'coverage') 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 -- cgit v1.2.1