6

重複の可能性:
Python try-else

少なくとも、Dive Into Python で読んだばかりの例に基づくと、その利点はわかりません。

try:
    from EasyDialogs import AskPassword
except ImportError:
    getpass = default_getpass
else:
    getpass = AskPassword

( http://www.diveintopython.net/file_handling/index.html )

より短い/より単純な方法で同じ効果を達成できなかったのはなぜですか:

try:
    from EasyDialogs import AskPassword
    getpass = AskPassword
except ImportError:
    getpass = default_getpass

私は何が欠けていますか?

4

2 に答える 2

5

おそらくスタイルを除いて、この例には利点はありません。一般に、例外を処理するコードの近くに例外を引き起こす可能性のあるコードを保持することをお勧めします。たとえば、これらを比較します。

try:
    from EasyDialogs import AskPassword
    # 20 other lines
    getpass = AskPassword
except ImportError:
    getpass = default_getpass

try:
    from EasyDialogs import AskPassword
except ImportError:
    getpass = default_getpass
else:
    # 20 other lines
    getpass = AskPassword

2 番目の方法はexcept、早く返せない場合や、例外を再スローできない場合に適しています。可能であれば、私は書いたでしょう:

try:
    from EasyDialogs import AskPassword
except ImportError:
    getpass = default_getpass
    return False // or throw Exception('something more descriptive')

# 20 other lines
getpass = AskPassword
于 2013-01-29T19:01:43.433 に答える
2

個人的には、状況によってはそれがより明確だと思います。当然、例外が発生しない場合は、より多くのコードを実行する必要があります。だからあなたが言っている方法で:

try:
    this_very_dangerous_call()
except ValueError:
    # if it breaks
    handle_value_error()
else:
    continue_with_my_code()
    # more code

したがって、例外処理コードを残りのコードから視覚的に分離しています。「これを試してみてください。壊れた場合は何かをしてください。そうでない場合は[ここに長い説明を挿入してください]」

于 2013-01-29T19:04:35.483 に答える