имя 'endCol' не определено в скрипте python - PullRequest
0 голосов
/ 08 апреля 2020

Я понятия не имею, почему моя переменная не определена

Мой код:

    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))

Вывод:

Пожалуйста, выберите следующую опцию:

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

3 (вход)

['ab c .csv', 'def.csv', 'ghi.csv']

def.csv (входные данные)

NameError: name 'endCol' is не определено

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

endCol является локальной переменной в функции menu, поэтому ее нельзя использовать извне. Вы можете вернуть нужное вам значение и сохранить его для последующего использования:

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))
0 голосов
/ 08 апреля 2020

Вы должны (например, добавить) return endCol после последнего оператора if функции menu() и перехватить возвращаемое значение в конце:

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 голосов
/ 08 апреля 2020

ваша переменная endCol видна только из вашей функции menu вы должны вернуть endCol из вашей функции:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...