2014-10-23 4 views
0

Я студент, работающий над заданием, где я должен учить все внутренние функции. Мои функции используют сложные строки и возвращают сложные строки, поэтому я понятия не имею, как это сделать. Например моя функция "ProcessImports()" может принять строку:Python/Doctest - сложные комплексные строки

%@import 
blahblah 
%@ 

И вернуться:

\begin{shadedquoteBlueBar} 
\fontsize{9pt}{9pt} 
\begin{Verbatim} 
blahblah} 
\end{Verbatim} 
\end{shadedquoteBlueBar} 
\noindent 

Как бы я идти вокруг doctesting это? Я не видел примеров использования doctest, которые не возвращают классы/структуры или числа или другие простые представления (например, «\ n» не работает).

Вот функция ProcessImports(): http://pastebin.com/3JjnyKjK

Любая помощь будет оценен по достоинству!

Редактировать: возможно, вы проигнорируете попытку учения наверху. Это просто я пытаюсь запутаться, чтобы узнать, могу ли я заставить его работать и терпеть неудачу.

ответ

0

В следующем примере показан один успешный подход; иметь в виду, что doctest просто нужно «выглядеть» переводчиком сессии:

from textwrap import dedent 

def function(s): 
    """Testing doctests. 

    >>> print function('''%@import 
    ... blahblah 
    ... %@''') 
    <BLANKLINE> 
    \\begin{shadedquoteBlueBar} 
    \\fontsize{9pt}{9pt} 
    \\begin{Verbatim} 
    blahblah} 
    \\end{Verbatim} 
    \\end{shadedquoteBlueBar} 
    \\noindent 

    """ 
    s = dedent(r""" 
       \begin{shadedquoteBlueBar} 
       \fontsize{9pt}{9pt} 
       \begin{Verbatim} 
       blahblah} 
       \end{Verbatim} 
       \end{shadedquoteBlueBar} 
       \noindent""") 
    return s 

Обратите внимание на продолжение символов ... на входе функции в строку документации.

+0

Но функция function() должна принимать строковый параметр, который представляет собой сложную строку (первый блок кода в вопросе. Посмотрите на связанный исходный код, чтобы увидеть, что я имею в виду). Как мне это сделать? – user2875994

+0

@ user2875994 ах, я вижу; обновлено. – jonrsharpe

+0

Я пробовал это, но он не работает:/Вот что я написал: [link] (http://pastebin.com/HCuJFa67) Я получаю сообщение «ValueError: строка 16 docstring для Prepro.ProcessImports отсутствует blank после >>>: «>>> ProcessImports ('' '% @ import" – user2875994

Смежные вопросы