1

在 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."""

有谁知道这些角色在那里做什么?还是只是我的包裹?

4

2 回答 2

5

在 Vim 中打开这个文件会显示一个^L字符,也就是页符。

如果您参考PEP8 风格指南,您会发现:

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

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

于 2013-04-29T13:34:21.057 回答
1

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

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

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

于 2013-04-29T13:33:44.803 回答