python模块中奇怪的char

时间:2013-04-29 13:27:47

标签: python

在Python 2.7.4的软件包中,当你转到Lib -> email -> errors.py时,模块中有一些有趣的东西。


# Copyright (C) 2001-2006 Python Software Foundation
# Author: Barry Warsaw
# Contact: email-sig@python.org

"""email package exception classes."""



class MessageError(Exception):
    """Base class for errors in the email package."""


class MessageParseError(MessageError):
    """Base class for message parsing errors."""


class HeaderParseError(MessageParseError):
    """Error while parsing headers."""


class BoundaryError(MessageParseError):
    """Couldn't find terminating boundary."""


class MultipartConversionError(MessageError, TypeError):
    """Conversion to a multipart is prohibited."""


class CharsetError(MessageError):
    """An illegal charset was given."""



# These are parsing defects which the parser was able to work around.
class MessageDefect:
    """Base class for a message defect."""

    def __init__(self, line=None):
        self.line = line

class NoBoundaryInMultipartDefect(MessageDefect):
    """A message claimed to be a multipart but had no boundary parameter."""

class StartBoundaryNotFoundDefect(MessageDefect):
    """The claimed start boundary was never found."""

class FirstHeaderLineIsContinuationDefect(MessageDefect):
    """A message had a continuation line as its first header line."""

class MisplacedEnvelopeHeaderDefect(MessageDefect):
    """A 'Unix-from' header was found in the middle of a header block."""

class MalformedHeaderDefect(MessageDefect):
    """Found a header that was missing a colon, or was otherwise malformed."""

class MultipartInvariantViolationDefect(MessageDefect):
    """A message claimed to be a multipart but no subparts were found."""

这是模块的全部内容。除此之外,还有2个非常奇怪的字符在预览中没有显示,并且无法复制粘贴。 它们看起来像人类的棒子(在记事本中),我发现它非常有趣。

其中一个就在

之前
class MessageError(Exception):
    """Base class for errors in the email package."""

另一个是在

之后
class CharsetError(MessageError):
    """An illegal charset was given."""

有没有人知道这些角色在那里做什么?或者只是我的包裹?

2 个答案:

答案 0 :(得分:5)

在Vim中打开此文件会显示^L个字符,a.k.a form feed

如果您参考PEP8 style guide,您会找到:

  

Python接受control-L(即^L)换页符作为空格; 许多工具会将这些字符视为页面分隔符,因此您可以使用它们来分隔文件相关部分的页面。请注意,某些编辑器和基于Web的代码查看器可能无法将control-L识别为换页符,并且会在其位置显示另一个字形。

在您的情况下,这些^L只是在逻辑上将MessageError派生类与MessageDefect派生类分开。

答案 1 :(得分:1)

他们也在我的版本的包中。用二进制编辑器打开文件我看到了

0D 0A 0D 0A 0D 0A 0C 0D 0A

所有这些0D 0A对都是回车/换行(Windows行结尾)。 0C是换页符,因此在打印模块时,您可以将每个部分放在单独的页面上。你的Python解析器应该忽略它们。