From 7f4997330596325f3ee8a8f26880d45ee7049e67 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 8 May 2016 08:25:46 -0400 Subject: Don't get confused by namespace packages #456 --- coverage/python.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'coverage/python.py') diff --git a/coverage/python.py b/coverage/python.py index 0cd2181..8e98bea 100644 --- a/coverage/python.py +++ b/coverage/python.py @@ -4,10 +4,13 @@ """Python source expertise for coverage.py""" import os.path +import types import zipimport from coverage import env, files -from coverage.misc import contract, expensive, NoSource, join_regex, isolate_module +from coverage.misc import ( + contract, CoverageException, expensive, NoSource, join_regex, isolate_module, +) from coverage.parser import PythonParser from coverage.phystokens import source_token_lines, source_encoding from coverage.plugin import FileReporter @@ -94,6 +97,10 @@ class PythonFileReporter(FileReporter): if hasattr(morf, '__file__'): filename = morf.__file__ + elif isinstance(morf, types.ModuleType): + # A module should have had .__file__, otherwise we can't use it. + # This could be a PEP-420 namespace package. + raise CoverageException("Module {0} has no file".format(morf)) else: filename = morf -- cgit v1.2.1