Skip to content

TokenError when generating html report #82

@nedbat

Description

@nedbat

Originally reported by Chris AtLee (Bitbucket: chrisatlee, GitHub: Unknown)


I'm trying to run coverage on the buildbot source like this:

#!sh
coverage run --branch =trial buildbot.test
coverage html -d cover -i 

And get the following exception:

#!python

Traceback (most recent call last):
  File "/home/catlee/.virtualenvs/buildbot.git/bin/coverage", line 9, in <module>
    load_entry_point('coverage==3.4a1', 'console_scripts', 'coverage')()
  File "/home/catlee/src/coveragepy/coverage/cmdline.py", line 639, in main
    status = CoverageScript().command_line(argv)
  File "/home/catlee/src/coveragepy/coverage/cmdline.py", line 531, in command_line
    directory=options.directory, **report_args)
  File "/home/catlee/src/coveragepy/coverage/control.py", line 522, in html_report
    include=self.config.include
  File "/home/catlee/src/coveragepy/coverage/html.py", line 47, in report
    self.report_files(self.html_file, morfs, directory, omit, include)
  File "/home/catlee/src/coveragepy/coverage/report.py", line 63, in report_files
    report_fn(cu, self.coverage._analyze(cu))
  File "/home/catlee/src/coveragepy/coverage/control.py", line 458, in _analyze
    return Analysis(self, it)
  File "/home/catlee/src/coveragepy/coverage/results.py", line 30, in __init__
    self.statements, self.excluded = self.parser.parse_source()
  File "/home/catlee/src/coveragepy/coverage/parser.py", line 188, in parse_source
    self._raw_parse()
  File "/home/catlee/src/coveragepy/coverage/parser.py", line 91, in _raw_parse
    for toktype, ttext, (slineno, _), (elineno, _), ltext in tokgen:
  File "/usr/lib/python2.5/tokenize.py", line 292, in generate_tokens
    raise TokenError, ("EOF in multi-line statement", (lnum, 0))
tokenize.TokenError: ('EOF in multi-line statement', (36, 0))

I think this is because there's one of the .html files in the coverage report for some reason. I can attach the .coverage file if that helps.

This patch seems to fix the problem:

#!diff

diff --git a/coverage/parser.py b/coverage/parser.py
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -179,17 +179,20 @@ class CodeParser(object):
 
         Return values are 1) a sorted list of executable line numbers, and
         2) a sorted list of excluded line numbers.
 
         Reported line numbers are normalized to the first line of multi-line
         statements.
 
         """
-        self._raw_parse()
+        try:
+            self._raw_parse()
+        except:
+            raise NoSource("Couldn't parse file: %s" % self.filename)
 
         excluded_lines = self.first_lines(self.excluded)
         ignore = excluded_lines + list(self.docstrings)
         lines = self.first_lines(self.statement_starts, ignore)
 
         return lines, excluded_lines
 
     def arcs(self):

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions