2013-04-29 101 views
1

在Python 2.7.4的包中,当您转到Lib -> email -> errors.py时,模块中有一些有趣的东西。Python模块中的奇怪字符


# Copyright (C) 2001-2006 Python Software Foundation 
# Author: Barry Warsaw 
# Contact: [email protected] 

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

这是模块的全部内容。除此之外,还有两个非常奇怪的字符,它们不会在预览中显示,并且不能被复制粘贴。 他们看起来像人类的棍子字符(记事本),我觉得它很有趣。

其中之一是前行

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

另一种是后

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

有没有人有一个想法,以什么这些字符在那里做什么?还是只是我的包?

+0

你是什么意思的“不能复制粘贴”?你不能选择它们吗?粘贴他们产生一个空的盒子?一个空的空间?也许截图也是有帮助的。 – ASGM 2013-04-29 13:30:53

+0

@ASGM,我可以选择,但是当我粘贴时,什么也没有显示出来。 – xylon97 2013-04-29 13:32:40

回答

5

在Vim中打开此文件显示^L字符,又名form feed

如果引用PEP8 style guide,你会发现:

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

在你的情况,这些^L只是逻辑上MessageDefect派生类中分离MessageError派生类。

+1

页面分隔符?哦,我的...“页”?当我们将信息存储在死树的切片中时,这是一个古老的技术术语吗? – Kos 2013-04-29 15:41:20

1

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

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

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