summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2011-04-08 22:21:18 -0400
committerNed Batchelder <ned@nedbatchelder.com>2011-04-08 22:21:18 -0400
commit50f2239ca3c565b28c25b51371c42b569fa05a8c (patch)
treec0bd675abd1570e7f9517f6271fc666d620d00f6
parent4d395ed6ac593efe933909f88dab05def0edcd2e (diff)
downloadpython-coveragepy-git-50f2239ca3c565b28c25b51371c42b569fa05a8c.tar.gz
Deal more gracefully with unexpectedly-not-python source during reporting.
-rw-r--r--coverage/misc.py6
-rw-r--r--coverage/parser.py5
-rw-r--r--coverage/report.py4
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