18

Paramiko のSFTPClientには明らかにメソッドがありませんexists。これは私の現在の実装です:

def rexists(sftp, path):
    """os.path.exists for paramiko's SCP object
    """
    try:
        sftp.stat(path)
    except IOError, e:
        if 'No such file' in str(e):
            return False
        raise
    else:
        return True

これを行うより良い方法はありますか?例外メッセージの部分文字列をチェックするのはかなり見苦しく、信頼できない場合があります。

4

3 に答える 3

20

これらすべてのエラー コードを定義する定数については、errnoモジュールを参照してください。errnoまた、引数の展開よりも例外の属性を使用する方が少し明確なので、次の__init__ようにします。

except IOError, e: # or "as" if you're using Python 3.0
  if e.errno == errno.ENOENT:
    ...
于 2009-09-08T00:29:06.087 に答える
7

(paramiko だけでなく) SFTP 用に定義された「存在する」メソッドがないため、メソッドは問題ありません。

私は errno をチェックする方が少しきれいだと思います:

def rexists(sftp, path):
    """os.path.exists for paramiko's SCP object
    """
    try:
        sftp.stat(path)
    except IOError, e:
        if e[0] == 2:
            return False
        raise
    else:
        return True
于 2009-05-12T02:16:12.727 に答える