Renvoyer un chemin de manière récursive en Python
En Python, vous avez rencontré un problème en essayant de renvoyer un chemin à partir d'une fonction récursive. Au lieu de cela, vous obtenez None dans le résultat.
Le code fourni cherche à parcourir un dictionnaire représentant une structure de système de fichiers, en recherchant un fichier spécifié par rqfile. Le chemin d'accès à ce fichier doit être renvoyé s'il est trouvé.
La cause première du problème est que lors d'une récurrence dans le dictionnaire, la fonction tente de renvoyer None dans la branche else lorsqu'elle rencontre une valeur non-dictionnaire. Cela met fin prématurément à la fonction, ce qui entraîne le retour de None.
Pour remédier à cela, vous devez renvoyer systématiquement le résultat de l'appel récursif :
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)
Ce code garantit que la fonction renvoie le chemin s'il est trouvé ou le résultat de l'appel récursif si le chemin actuel n'est pas celui que vous recherchez. Alternativement, vous pouvez également gérer le cas extrême où rqfile n'est pas présent dans le chemin actuel :
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)
En implémentant l'une de ces solutions, votre fonction renverra correctement le chemin d'accès au fichier demandé ou Aucun s'il est introuvable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!