Je ne sais pas pourquoi ma variable n'est pas définie

Mon code:

    def menu():
            print("Please select the following option:\n 1. 1b\n 2. 2b\n 3. 3b\n 4. 4b\n 5. 5b\n")
            option = input()
            if option == "1":
                    endCol = 133
            if option == "2":
                    endCol = 135
            if option == "3":
                    endCol = 263
            if option == "4":
                    endCol = 519
            if option == "5":
                    endCol = 1031
    def filebrowser(ext=""):
            "Returns files with an extension"
            return [f for f in glob.glob(f"*{ext}")]
    menu()
    x = filebrowser(".csv")
    csv = input()
    df2 = pd.read_csv(csv, skiprows = range(62,125), usecols = range(3,endCol))

Production:

Veuillez sélectionner l'option suivante:

  1. 1b
  2. 2b
  3. 3b
  4. 4b
  5. 5b

3 (entrée)

['abc.csv', 'def.csv', 'ghi.csv']

Def.csv (entrée)

NameError: le nom 'endCol' n'est pas défini

0
user6201481 8 avril 2020 à 10:19

3 réponses

Meilleure réponse

Votre variable endCol n'est visible qu'à partir de votre fonction menu vous devez retourner endCol à partir de votre fonction:

def menu():
    print("Please select the following option:\n 1. 1b\n 2. 2b\n 3. 3b\n 4. 4b\n 5. 5b\n")
    option = input()
    endCol = None
    if option == "1":
            endCol = 133
    if option == "2":
            endCol = 135
    if option == "3":
            endCol = 263
    if option == "4":
            endCol = 519
    if option == "5":
            endCol = 1031
    return endCol

endCol = menu()
0
rid 8 avril 2020 à 07:28

Vous devez (par exemple) ajouter un return endCol après la dernière instruction if de la fonction menu() et récupérer la valeur de retour à la fin:

def menu():
    print("Please select the following option:\n 1. 1b\n 2. 2b\n 3. 3b\n 4. 4b\n 5. 5b\n")
    option = input()
    if option == "1":
        endCol = 133
    if option == "2":
        endCol = 135
    if option == "3":
        endCol = 263
    if option == "4":
        endCol = 519
    if option == "5":
        endCol = 1031
    return endCol

## when calling the menu() function:
V = menu()

### you can now work with the value V:

df2 = pd.read_csv(csv, skiprows=range(62,125), usecols=range(3, V))
0
xtlc 8 avril 2020 à 07:27

endCol est une variable locale dans la fonction menu, elle ne peut donc pas être utilisée de l'extérieur. Vous pouvez retourner la valeur dont vous avez besoin et l'enregistrer pour l'utiliser plus tard:

def menu():
        print("Please select the following option:\n 1. 1b\n 2. 2b\n 3. 3b\n 4. 4b\n 5. 5b\n")
        option = input()
        if option == "1":
                return 133
        if option == "2":
                return 135
        if option == "3":
                return 263
        if option == "4":
                return 519
        if option == "5":
                return 1031
def filebrowser(ext=""):
        "Returns files with an extension"
        return [f for f in glob.glob(f"*{ext}")]
endCol = menu()
x = filebrowser(".csv")
csv = input()
df2 = pd.read_csv(csv, skiprows = range(62,125), usecols = range(3,endCol))
1
fas 8 avril 2020 à 07:23