summaryrefslogtreecommitdiff
path: root/coverage/parser.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-10-25 09:38:58 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-10-25 09:38:58 -0400
commita7f4c6c633a1ff02412f4f3e6695c12e2ba87808 (patch)
treed8e0beb3bd7d7a9bb4d50e698314246fcfeb4f08 /coverage/parser.py
parentffb82b1d4ce8553ac230d3ecabbf094c4c20d140 (diff)
downloadpython-coveragepy-git-a7f4c6c633a1ff02412f4f3e6695c12e2ba87808.tar.gz
Treat missing source files nicer.
Diffstat (limited to 'coverage/parser.py')
-rw-r--r--coverage/parser.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/coverage/parser.py b/coverage/parser.py
index 8957123a..433cb66c 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -4,7 +4,7 @@ import glob, opcode, os, re, sys, token, tokenize
from coverage.backward import set, sorted, StringIO # pylint: disable-msg=W0622
from coverage.bytecode import ByteCodes, CodeObjects
-from coverage.misc import nice_pair, CoverageException
+from coverage.misc import nice_pair, CoverageException, NoSource
class CodeParser(object):
@@ -20,9 +20,13 @@ class CodeParser(object):
assert text or filename, "CodeParser needs either text or filename"
self.filename = filename or "<code>"
if not text:
- sourcef = open(self.filename, 'rU')
- self.text = sourcef.read()
- sourcef.close()
+ try:
+ sourcef = open(self.filename, 'rU')
+ self.text = sourcef.read()
+ sourcef.close()
+ except IOError:
+ _, err, _ = sys.exc_info()
+ raise NoSource("No source for code: %r: %s" % (self.filename, err))
self.text = self.text.replace('\r\n', '\n')
self.exclude = exclude