1
我不明白爲什麼運行python代碼的兩種方法在加載模塊時會有不同的結果。python導入模塊在解釋器和腳本文件中給出兩個不同的輸出
我執行腳本文件名爲ssl.py
import httplib
import sys
print sys.version_info
print dir(httplib)
這是命令窗口輸出我收到
C:\tests>python ssl.py
sys.version_info(major=2, minor=7, micro=9, releaselevel='final', serial=0)
['ACCEPTED', 'BAD_GATEWAY', 'BAD_REQUEST', 'CONFLICT', 'CONTINUE', 'CREATED', 'E
XPECTATION_FAILED', 'FAILED_DEPENDENCY', 'FORBIDDEN', 'FOUND', 'GATEWAY_TIMEOUT'
, 'GONE', 'HTTP', 'HTTPConnection', 'HTTPMessage', 'HTTPResponse', 'HTTPS_PORT',
'HTTP_PORT', 'HTTP_VERSION_NOT_SUPPORTED', 'IM_USED', 'INSUFFICIENT_STORAGE', '
INTERNAL_SERVER_ERROR', 'LENGTH_REQUIRED', 'LOCKED', 'MAXAMOUNT', 'METHOD_NOT_AL
LOWED', 'MOVED_PERMANENTLY', 'MULTIPLE_CHOICES', 'MULTI_STATUS', 'NON_AUTHORITAT
IVE_INFORMATION', 'NOT_ACCEPTABLE', 'NOT_EXTENDED', 'NOT_FOUND', 'NOT_IMPLEMENTE
D', 'NOT_MODIFIED', 'NO_CONTENT', 'OK', 'PARTIAL_CONTENT', 'PAYMENT_REQUIRED', '
PRECONDITION_FAILED', 'PROCESSING', 'PROXY_AUTHENTICATION_REQUIRED', 'REQUESTED_
RANGE_NOT_SATISFIABLE', 'REQUEST_ENTITY_TOO_LARGE', 'REQUEST_TIMEOUT', 'REQUEST_
URI_TOO_LONG', 'RESET_CONTENT', 'SEE_OTHER', 'SERVICE_UNAVAILABLE', 'SWITCHING_P
ROTOCOLS', 'StringIO', 'TEMPORARY_REDIRECT', 'UNAUTHORIZED', 'UNPROCESSABLE_ENTI
TY', 'UNSUPPORTED_MEDIA_TYPE', 'UPGRADE_REQUIRED', 'USE_PROXY', '_CS_IDLE', '_CS
_REQ_SENT', '_CS_REQ_STARTED', '_MAXHEADERS', '_MAXLINE', '_UNKNOWN', '__all__',
'__builtins__', '__doc__', '__file__', '__name__', '__package__', 'array', 'mim
etools', 'os', 'py3kwarning', 'responses', 'socket', 'urlsplit', 'warnings']
C:\tests>python
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import httplib
>>> dir(httplib)
['ACCEPTED', 'BAD_GATEWAY', 'BAD_REQUEST', 'BadStatusLine', 'CONFLICT', 'CONTINU
E', 'CREATED', 'CannotSendHeader', 'CannotSendRequest', 'EXPECTATION_FAILED', 'F
AILED_DEPENDENCY', 'FORBIDDEN', 'FOUND', 'FakeSocket', 'GATEWAY_TIMEOUT', 'GONE'
, 'HTTP', 'HTTPConnection', 'HTTPException', 'HTTPMessage', 'HTTPResponse', 'HTT
PS', 'HTTPSConnection', 'HTTPS_PORT', 'HTTP_PORT', 'HTTP_VERSION_NOT_SUPPORTED',
'IM_USED', 'INSUFFICIENT_STORAGE', 'INTERNAL_SERVER_ERROR', 'ImproperConnection
State', 'IncompleteRead', 'InvalidURL', 'LENGTH_REQUIRED', 'LOCKED', 'LineAndFil
eWrapper', 'LineTooLong', 'MAXAMOUNT', 'METHOD_NOT_ALLOWED', 'MOVED_PERMANENTLY'
, 'MULTIPLE_CHOICES', 'MULTI_STATUS', 'NON_AUTHORITATIVE_INFORMATION', 'NOT_ACCE
PTABLE', 'NOT_EXTENDED', 'NOT_FOUND', 'NOT_IMPLEMENTED', 'NOT_MODIFIED', 'NO_CON
TENT', 'NotConnected', 'OK', 'PARTIAL_CONTENT', 'PAYMENT_REQUIRED', 'PRECONDITIO
N_FAILED', 'PROCESSING', 'PROXY_AUTHENTICATION_REQUIRED', 'REQUESTED_RANGE_NOT_S
ATISFIABLE', 'REQUEST_ENTITY_TOO_LARGE', 'REQUEST_TIMEOUT', 'REQUEST_URI_TOO_LON
G', 'RESET_CONTENT', 'ResponseNotReady', 'SEE_OTHER', 'SERVICE_UNAVAILABLE', 'SW
ITCHING_PROTOCOLS', 'StringIO', 'TEMPORARY_REDIRECT', 'UNAUTHORIZED', 'UNPROCESS
ABLE_ENTITY', 'UNSUPPORTED_MEDIA_TYPE', 'UPGRADE_REQUIRED', 'USE_PROXY', 'Unimpl
ementedFileMode', 'UnknownProtocol', 'UnknownTransferEncoding', '_CS_IDLE', '_CS
_REQ_SENT', '_CS_REQ_STARTED', '_MAXHEADERS', '_MAXLINE', '_UNKNOWN', '__all__',
'__builtins__', '__doc__', '__file__', '__name__', '__package__', 'array', 'err
or', 'mimetools', 'os', 'py3kwarning', 'responses', 'socket', 'ssl', 'urlsplit',
'warnings']
>>>
你會發現HTTPSConnection方法是httplib的一個版本,而不是其他。這是爲什麼發生?
您可以在輸入它後顯示您正在使用的庫的路徑,然後執行'print httplib'。 –
兩者似乎都使用'C:\ Python27 \ lib \ httplib.pyc'中的 HTTPSConnection也出現在該文件中。然而,當我嘗試使用它時,我得到'AttributeError:'模塊'對象沒有屬性'HTTPSConnection'。 –
根據'httplib'源代碼,它會嘗試導入模塊'ssl',並且只有在成功後纔會將'HTTPSConnection'添加到'__all__'。你可以嘗試從腳本中導入'ssl'嗎? – werewindle