• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Неверный вывод функции

Vlg

Green Team
02.11.2019
117
1
BIT
19
Господа и дамы, тут такой казус. Я собрал некий скрипт и в нем есть функция открытия файла... Чё я вам рассказываю? Лучше покажу
Python:
def openfile():
try:
  path=input('Path to ipfile: ')
  files=open(path,'r')
  file_list=files.read()
  files.close()
  list=file_list.split('\n')
  return list
except FileNotFoundError:
      print('File not found')
      openfile()
       
       
list=openfile()

В чем же казус? А в том что если вы ошиблись с путем к файлу то переменной list что в последней строке сначало будет присвоено значение None а затем эта функция(openfile()) перезапустит себя но значение переменной никак не измениться если я правильно введу путь к файлу после неправильного.
P.S мне лень расставлять запятые
 
Решение
Во-первых, так лучше не делать:

1613752545776.png


Твоя функция возвращает значение только с первого своего уровня. Когда функция перезапускает сама себя, то последующие return-ы у тебя просто игнорируются (т.к. родительская функция их не ждёт и не передаёт "вверх"). Не загоняй функцию в такую рекурсию.

Python:
def open_file():
    while True:
        try:
            path = input('Path to ipfile: ')
            files = open(path, 'r')
            file_list = files.read()
            files.close()
            return file_list.split('\n')
        except FileNotFoundError:
            print('File not found')
            continue


file_listing = open_file()
print(file_listing)

Pernat1y

Well-known member
05.04.2018
1 443
135
BIT
0
Во-первых, так лучше не делать:

1613752545776.png


Твоя функция возвращает значение только с первого своего уровня. Когда функция перезапускает сама себя, то последующие return-ы у тебя просто игнорируются (т.к. родительская функция их не ждёт и не передаёт "вверх"). Не загоняй функцию в такую рекурсию.

Python:
def open_file():
    while True:
        try:
            path = input('Path to ipfile: ')
            files = open(path, 'r')
            file_list = files.read()
            files.close()
            return file_list.split('\n')
        except FileNotFoundError:
            print('File not found')
            continue


file_listing = open_file()
print(file_listing)
 
Последнее редактирование:
Решение
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!