2013-04-29 102 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解析器應該忽略它們。