[Zope] strange 'print' behavior in Python Scripts

Luciano Ramalho luciano@hiper.com.br
Fri, 29 Jun 2001 16:31:06 -0300


I suppose this has to do with the way PythonScripts are interpreted. As
you may have noticed, Zope prepends a function definition line like "def
your_id(args...):" to the text of your PythonScript before evaluating it
(that is why errors in PythonScripts are reported with the line count
off by one). 

In order to make the whole block syntatically valid, the body of the
function must be indented relative to the function definition. So before
evaluating your function, Zope must prepend a space in each line. It
should be smart enough to treat triple-quotes differently, but it isn't.

Now, I think the need to use triple-quoted strings can imply a design
problem: it means you are embedding the template in your code, which is
often a bad idea. Without knowing what you are doing, I would try and
separate the embedded template from the Python logic.

Regards,

Luciano 

"Christopher N. Deckard" wrote:
> 
> > From: "Christopher N. Deckard" <cnd@ecn.purdue.edu>
> > > Clarification, this happens when using triple quotes
> > >
> > > print '''
> > > foo
> > > bar
> > > '''
> > >
> > > Actually prints:
> > >  foo
> > >  bar
> >
> > Ah, I knew this would bite somebody someday, but you're the first to
> > mention it.  When a Script is compiled, it is actually converted into a
> > function by prefixing it with a "def f(params..." line.  If the body
> > isn't indented, it won't compile, so it indents it one space.  You can
> > get around this by manually indenting.  In other words:
> >
> >     ## Script (Python) "indented"
> >     print '''
> > foo
> > bar
> > '''
> >     return printed
> 
> Hmm, this was not the answer I was looking for.  Are there any
> thoughts on fixing this in the future?  I've fun into it many times
> now and couldn't figure out what was going on.  It is especially bad
> when printing a textarea for a form.  Everything comes out indented
> a space.
> 
> I'll just go line by line for now.  Thanks for the answer.
> 
> -Chris
> 
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists -
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope-dev )