2017-10-02 2 views
1

c'est mon premier post ici, donc je suis la bienvenue à la critique en ce qui concerne le poste lui-même en termes de mise en page, etc.TypeError lors de l'attribution d'un chemin non existant à une chaîne

Je suis en train d'écrire un script pour trier automatiquement les fichiers. Pour cela, je dois demander une source où les fichiers sont.

import os 
import os.path 
import shutil 
import time 

def main(): 
    src = get_source() 
    dst = get_destination() 
    sort_files_by_modification_time(src, dst) 

def get_source(): 
    path_source = input("Where are the files?\n") 
    if not os.path.exists(path_source): 
     print("The system cannot find the path specified.") 
     get_source() 
    elif not os.listdir(path_source): 
     print("The selected path is empty.") 
     get_source() 
    else: 
     return path_source 

#didnt want to simplify this bit, since in the line path_current = something 
# the error occurs. It is a TypeError: expected str 

def sort_files_by_modification_time(path_source) 
    for x in range(0, len(os.listdir(path_source))): 
     path_current = os.path.join(path_source, os.listdir(path_source)[x])   

if __name__ == '__main__': 
    main() 

J'ai essayé de le simplifier autant que possible. Lorsque je tape un chemin existant, tout fonctionne bien.

par ex. currentpath \ testfolder existe

Si je devais "accidentellement" taper currentpath \ testfolde sans le r le cas échéant, j'appellerai de nouveau la méthode. La même chose se produira si le dossier est vide (ce qui est également vérifié avec elif). Donc: Si inside get_source() get_source est appelé à nouveau, la variable src sera NoneType ou contiendra None.

Qu'est-ce que je fais de mal?

Merci pour le conseil!

Répondre

0

Dans la fonction get_source, lorsque vous appelez récursivement get_source(), vous ne l'avez pas spécifié pour renvoyer le résultat et l'instruction n'a aucun effet. Ajoutez le mot-clé return dans ces deux cas, comme ceci:

def get_source(): 
path_source = input("Where are the files?\n") 
if not os.path.exists(path_source): 
    print("The system cannot find the path specified.") 
    return get_source() 
elif not os.listdir(path_source): 
    print("The selected path is empty.") 
    return get_source() 
else: 
    return path_source 
+0

Merci beaucoup! Cela a résolu mon problème :) –