[Python-ideas] pep8 clarification, conditional top-level class/function leading newlines

Steven D'Aprano steve at pearwood.info
Sun Mar 3 01:01:31 CET 2013


On 03/03/13 01:06, Mark Lawrence wrote:
> On 02/03/2013 13:53, Dima Tisnek wrote:
> > Hi,
> > I'm trying to figure out how to space following code according to pep-8:
>
> I ignore PEP 8 whenever I feel like it, it's not written in stone, it's simply a guide.

Technically you don't, since PEP 8 states to break the rules when needed, so even when you break it you are obeying it :-)


> > try:
> >      import x
> >
> >
> >      class A:
> >          def foo(self):
> >              # magic using x
> >              pass
> > except ImportError:
> >      import y
> >      # different magic, using y


Where possible, I would write that as:


try:
     import x
except ImportError:
     import y as x


class A:
     # unconditional magic using x



Another variation:

try:
     from x import A
except ImportError:
     import y

     class A:
         # magic using y

...



I must admit I've never come across your variation, but if I did:


try:
     import x

     class A:  # why is this in the try block?
         pass

except ImportError:
     import y

     class B:
         pass

...


[...]
> > PEP-8 states to separate top-level class and functions by 2 blank
> > lines and methods in a class by 1 blank line. This case falls into the
> > crack, it's neither strictly top-level, nor a sub-level.


Note that PEP 8 states "top level", not "global". That means, no leading indentation. So a conditional class definition falls into the "1 line between indented classes and function" bucket.

But frankly, I would make a final judgement only after actually typing up the code and looking at it.





-- 
Steven



More information about the Python-ideas mailing list