python的2.5與2.7版本中ftp模組的一個小區別

linda1000發表於2012-12-04

今天原本計劃更換下python的版本,從2.5升級到2.7, 結果發現很多模組貌似不通,

目前找出其中一個關於ftp模組的區別,檢視了python中ftplib模組中的實現,版本間更新導致的

程式碼中關於ftp的實現:

    ftp = FTP()
    ftp.connect(ftpip,'')  
    ftp.login(ftpusername,ftppwd)                         
    ftp.cwd(ftpfolder) 
在python2.5中測試通過,然而在2.7版本中執行報錯 error: [Errno 10049] The requested address is not valid in its context

通過對比python中ftplib.py中connect() 程式碼發現

python 2.5中

        if host: self.host = host
        if port: self.port = port

當傳參為 '' 時, self.port將採用預設值

python 2.7中

        if host != '':
            self.host = host
        if port > 0:
            self.port = port

當傳參為 '' 時, 判斷port值大於0,self.port將被賦為''

這就導致之後sock.connect連線失敗

目前python2.7以上版本的多數應用中,採用 ftp.connect(ftpip)


PS:兩個版本間的ftp模組中connect的改動比較大,並增加超時設定,可以多看看


相關文章