ホームページ >バックエンド開発 >Python チュートリアル >パスを検索しようとすると、再帰的な Python 関数が何も返さないのはなぜですか?
Python でパスを再帰的に返す
Python で、再帰関数からパスを返そうとしたときに問題が発生しました。代わりに、結果として None が得られます。
提供されたコードは、ファイル システム構造を表す辞書を走査し、rqfile で指定されたファイルを検索します。見つかった場合は、そのファイルへのパスが返される必要があります。
問題の根本的な原因は、辞書を再帰的に実行しているときに、関数が辞書以外の値に遭遇したときに else 分岐で None を返そうとすることです。これにより関数が途中で終了し、None が返されます。
これを修正するには、再帰呼び出しの結果を一貫して返す必要があります。
for filename in dictionary.keys(): path = prefix + [filename] if not isinstance(dictionary[filename], dict): if rqfile in str(os.path.join(*path)): return str(os.path.join(*path)) else: # Remove unnecessary else block return get_path(directory[filename], rqfile, path)
このコードは、関数が返すことを保証します。見つかった場合はパス、現在のパスが探しているパスではない場合は再帰呼び出しの結果。あるいは、現在のパスに rqfile が存在しないというエッジケースを処理することもできます。
for filename in dictionary.keys(): path = prefix + [filename] if not isinstance(dictionary[filename], dict): if rqfile in str(os.path.join(*path)): return str(os.path.join(*path)) else: return None return get_path(directory[filename], rqfile, path)
これらの解決策のいずれかを実装すると、関数は要求されたファイルへのパスを正しく返すか、ファイルが存在しない場合は None を返します。見つかりません。
以上がパスを検索しようとすると、再帰的な Python 関数が何も返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。