2013-10-23 85 views
0

我有一個訪問ftp服務器的python應用程序。有幾種錯誤情況下,我想類似httplib2的時尚捕捉:檢查ftplib響應代碼

try: 
    urllib2.urlopen("http://google.com") 
except urllib2.HTTPError, e: 
    if e.code == 304: 
     #do 304 stuff 
    if e.code == 404: 
     #do 404 stuff 
    else: 
     pass 

請問像這樣的一個結構中ftplib.err_perm存在嗎?我知道可以根據文檔返回500-599的代碼,但我沒有看到關於如何訪問該值的文檔中的任何內容。我錯過了什麼?

回答

1

您可以使用<exception_obj>.args[0]訪問錯誤響應字符串。它包含字符串如'550 /no-such-dir: No such file or directory'

要獲得錯誤代碼(僅前導三個字符),請使用<exception_obj>.args[0][:3]

例如:

import ftplib 
ftp = ftplib.FTP('ftp.hq.nasa.gov') 
ftp.login('anonymous', '[email protected]') 
try: 
    ftp.cwd('/no-such-dir') 
except ftplib.error_perm as e: 
    print('Error {}'.format(e.args[0][:3])) 
finally: 
    ftp.quit() 
+0

這一工程,但有沒有爲代碼或只是保持代碼的對象的屬性爲getter? – Brad

+0

@Brad,如果你使用'python 2.7',你可以使用'e.message [:3]'而不是'e.args [0] [:3]'。但它已經在Python 3.x中消失了。沒有其他財產。 ['ftplib.error_perm'](http://hg.python.org/cpython/file/179a3cf73e47/Lib/ftplib.py#l61)從'ftplib.Error'繼承,'ftplib.Error'繼承自'Exception' .. ['BaseException'](http://docs.python.org/3/library/exceptions.html#BaseException)它不提供任何額外的屬性/屬性。 – falsetru