0

次の点を考慮してください。

    def funcA():
        some process = dynamicVar
        if dynamicVar == 1:
            return dynamicVar
        else:
            print "no dynamicVar"

    def main():
        outcome = funcA()

「何らかのプロセス」部分の結果が 1 の場合、var dynamicVar はoutcomeメイン関数として返されます。dynamicVar が 1 以外の場合、引数が返されないため、ルーチンは失敗します。

結果をリストとしてラップできます。

    def funcA():
        outcomeList = []
        some process = dynamicVar
        if dynamicVar == 1:
            outcomeList.append(dynamicVar)
            return outcomeList
        else:
            print "no dynamicVar"
            return outcomeList

    def main():
        outcome = funcA()
        if outcome != []:
            do something using dynamicVar
        else:
            do something else!

または多分辞書項目として。私が考えることができる2つのソリューションのそれぞれは、メイン/リクエスト機能に別の処理セットを含みます。

これは、この不測の事態を処理する「正しい」方法ですか? またはより良い方法はありますか?

これに対処する適切な方法は何ですか。try:私は特にキャッチ/エラーを試みることを考えていたexcept:ので、その例では使用が逆になっているので、次のようになります:

    def funcA():
        some process = dynamicVar
        if dynamicVar == 1:
            return
        else:
            outcome = "no dynamicVar"
            return outcome 

    def main():
        try:
            funcA()
        except:
            outcome = funcA.dynamicVar 
4

2 に答える 2

3

Python では、値を返さないすべての関数は暗黙的に を返しNoneます。チェックインするだけif outcome is not Noneですmain()

于 2012-11-19T05:26:35.830 に答える
2

関数を書くとき、その戻り値は明確で期待されるはずです。返すと言ったものは返す必要があります。そうは言ってNoneも、意味のある戻り値として使用して、操作が失敗したか、結果が生成されなかったことを示すことができます。

def doSomething():
    """
    doSomething will return a string value 
    If there is no value available, None will be returned
    """
    if check_something():
        return "a string"

    # this is being explicit. If you did not do this,
    # None would still be returned. But it is nice
    # to be verbose so it reads properly with intent.   
    return None

または、同じタイプのデフォルトを常に返すようにすることもできます。

def doSomething():
    """
    doSomething will return a string value 
    If there is no value available, and empty string 
    will be returned
    """
    if check_something():
        return "a string"

    return ""

これは、最終的に失敗する一連の複雑な条件付きテストでケースを処理します。

def doSomething():
    if foo:
        if bar:
            if biz:
                return "value"
    return ""
于 2012-11-19T05:30:54.630 に答える