1
def set_attribute(attributes, name, value):
    for i, attribute in enumerate(attributes):
        if name in attribute:
            quote_char = attribute.find('"')
            if quote_char == -1:
                raise ValueError
                return None
            attributes[i] = attribute[:quote_char+1] + str(value) + '"'
            return attributes

私は新しいプログラマーであり、例外処理を正しく理解しようとしています。

この例では、すべての場所に文字が含まれてnameいる必要がある"ため、これが失敗した場合は例外を発生させたいと思いますが、return Noneステートメントが必要かどうか(または何かをするかどうか)も理解しようとしました。

私の理解では、例外ハンドラーが見つかるまで、スコープの各レベルから脱出することになりました。Pythonチュートリアルはこれを言います:

  • 最初に、try句(tryキーワードとexceptキーワードの間のステートメント)が実行されます。
  • 例外が発生しない場合、except句はスキップされ、tryステートメントの実行が終了します。
  • try句の実行中に例外が発生した場合、残りの句はスキップされます。次に、そのタイプがexceptキーワードにちなんで名付けられた例外と一致する場合、except句が実行され、その後、tryステートメントの後に実行が続行されます。
  • try句の実行中に例外が発生した場合、残りの句はスキップされます。次に、そのタイプがexceptキーワードにちなんで名付けられた例外と一致する場合、except句が実行され、その後、tryステートメントの後に実行が続行されます。
  • 例外句で指定された例外と一致しない例外が発生した場合、それは外部のtryステートメントに渡されます。ハンドラーが見つからない場合、それは未処理の例外であり、実行は上記のようなメッセージで停止します。

しかし、この説明を読んだ後、私は例外を理解していないことに気づきましたが、理解する必要があります。

それで、質問を簡単に述べると、このreturn Noneステートメントは必要ですか、そしてなぜですか?また、例外がどのように機能するかについてどこが間違っていますか?

4

1 に答える 1

3

return Noneがらくたです。Pythonは決してそこに到達しません。


コードを単純化し、少し実験を実行して、値FOOが返されるかどうかを確認できます。

def foo():
    if True:
        raise ValueError('Bad value')
        return 'FOO'
    return 'BAR'

try:
    print(foo())
except ValueError as err:
    print(err)
    # Bad value

FOO返された場合は、に表示される可能性がありますがprint(foo())、実際にはその行には何も出力されません。代わりに表示されますBad value

于 2013-01-15T19:19:16.947 に答える