Способ обработки ошибок токенизации полностью зависит от того, почему вы токенизируете. Ваш код дает вам все действительные токены вплоть до начала неверного строкового литерала. Если вам нужен этот токен, используйте его.
У вас есть несколько вариантов того, что делать с ошибкой:
Вы можете проигнорировать его и получить неполный поток токенов.
Вы можете буферизовать все токены и использовать поток токенов, только если не было ошибок.
Вы можете обработать токены, но прервите обработку более высокого уровня, если произошла ошибка.
Что касается того, может ли эта ошибка произойти с чем-либо, кроме неполной строки документации, да. Помните, что строки документов - это просто строковые литералы. Любой неопределенный многострочный строковый литерал выдаст вам ту же ошибку. Подобные ошибки могут произойти и для других лексических ошибок в коде.
Например, вот другие значения s, которые вызывают ошибки (по крайней мере, в Python 2.5):
s = ")" # EOF in multi-line statement
s = "(" # EOF in multi-line statement
s = "]" # EOF in multi-line statement
s = "[" # EOF in multi-line statement
s = "}" # EOF in multi-line statement
s = "{" # EOF in multi-line statement
Как ни странно, другие бессмысленные входы вместо этого выдают значения ERRORTOKEN:
s = "$"
s = "'"