как удалить переменную в сочетании функций в цикле?

#python-3.x #python

#python-3.x #python

Вопрос:

 def wpath():
    defpath = '/home/me/documents/'
    os.chdir(defpath)
    path = str(input("would you like to change current working directory? [y/yes] if you want"))
    if path == 'yes' or path == 'y':
        while True:
            try:
                os.chdir(input('Enter new path! n'))
                break
            except OSError:
                print('nno such directory! Try again!')
    else:
        pass
    src()


def src():
    global d
    d = {}
    n = 0
    for file in os.listdir('.'):
        if re.search('.?.(txt|csv|log)', file):
            n  = 1
            print(n, file)
            d[n] = file
    if len(d) == 0:
        del d
        wpath()

wpath()

val = int(input('Enter number of filen'))
if val in d:
    source = d[val]
  

После того, как я опубликовал свой пост, я осознал свою ошибку. Спасибо.
Теперь код работает. Я исправил код в своем вопросе.

Ответ №1:

Вы вызываете, del d только если len(d) == 0 . Происходит ли это? Можете ли вы вставить print вызов в эту ветвь и посмотреть, del действительно ли вызывается?

Тем не менее, del d это запах кода. Я на 99,99% уверен, что вам действительно не нужно использовать это здесь. Можете ли вы объяснить, что именно вы пытаетесь сделать?

Кроме того, зачем вам нужен d в качестве словаря, если вы добавляете в него только последовательные цифровые клавиши? Не было бы лучше вместо этого иметь список и append к нему?

Комментарии:

1. Eli «Тем не менее, удаление d — это запах кода. Я на 99,99% уверен, что вам действительно не нужно использовать это здесь. Можете ли вы объяснить, что именно вы пытаетесь сделать?» Я хочу удалить пустую переменную ‘d’, если в каталоге нет нужных файлов (txt,log)

2. @werwolf_x: почему вы хотите ее удалить?

3. Я думаю, что это самый простой вариант. что вы предлагаете?

4. @werwolf_x: удаление переменной в Python редко бывает полезным. вы могли бы снова присвоить ее {}