私は、ftpに接続するためにいくつかのパラメタのリストを試し、可能な最初のサーバに接続する機能を持っています。コード内でさらにwith文から復帰するには?
def connect(params):
for user, passw, host in params:
try:
import pdb;pdb.set_trace()
with FTPHost(host, user, passw) as h:
return h
except FTPError as e:
logger.debug("Can't connect to ftp error is {}".format(e))
else:
raise Exception(
"Can't connect to ftp server with none of the {}".format(params)
)
私はその
host = connect(*args)
host.walk()
ような何かをしようとしているが、右後に接続を閉じた返しています。これはおそらくそれがうまくいかなければならないと私は望んだが、おそらくそれはうまくいくはずだ。 しかし、私はアプリケーションロジックからの試行を適切にカプセル化する方法を実際には分かりません。
私は
def connect(params, some_application_function):
for user, passw, host in params:
try:
import pdb;pdb.set_trace()
with FTPHost(host, user, passw) as host:
some_application_function(host)
except FTPError as e:
logger.debug("Can't connect to ftp error is {}".format(e))
else:
raise Exception(
"Can't connect to ftp server with none of the {}".format(params)
)
(これは右、そのための正しい名前である?)確かに私は継続渡しスタイルにこれを変更することができます意味しかし、これは読みにくく思えます。他のオプションはありますか?
あなたの質問に直接対処するのではなく、try/exceptでコンテキストマネージャをラップするのは不思議に思われます - なぜ '__enter__'と' __exit__'を調整しないのですか? – timgeb
どこを調整しますか? FTPHostはライブラリです。私のコントロールではありません。申し訳ありませんが、私は明示的に述べていませんでした – user1685095
あなたのコントロールから外れているわけではありませんが、ライブラリのアダプタパターンは常にあなたが望むものとはまったく同じではありませんが、ほとんどの場合:)残念ながら、 – timgeb