2017-02-06 8 views
0

У меня есть функция Python для записи текстового файла в новую или существующую папку. Проблема в том, что я впервые запускаю функцию, когда папка не существует, я получаю TypeError: Object типа «NoneType» не имеет len(). Во второй раз, когда я запускаю его, после создания папки он работает нормально.Запись в новую или существующую папку

import os 

def save_string_to_folder(new_folder, string): 
    folder_path = 'C:\Users\e6082493\Documents\Improve\Python\Scraping\Folder_%s' % (new_folder) 
    if not os.path.exists(folder_path): 
     folder_path = os.makedirs(folder_path) 
    join_path = os.path.join(folder_path, string) 
    join_path_finish = open(join_path, "w") 
    join_path_finish.close() 


save_string_to_folder('new', 'TextFile.txt') 

Я бы подумал, что моя инструкция «if» будет исправлена ​​для этой ошибки. Кажется, я не могу понять, что мне не хватает. Благодарю.

Вот отслеживающий:

Traceback (most recent call last): 
    File "new_2.py", line 12, in <module> 
    save_string_to_folder('new', 'TextFile.txt') 
    File "new_2.py", line 7, in save_string_to_folder 
    join_path = os.path.join(folder_path, string) 
    File "C:\Python27\lib\ntpath.py", line 65, in join 
result_drive, result_path = splitdrive(path) 
    File "C:\Python27\lib\ntpath.py", line 115, in splitdrive 
    if len(p) > 1: 
TypeError: object of type 'NoneType' has no len() 
PS C:\Users\e6082493\Documents\ImproveBKFS\Python\Scraping> 
+0

Пожалуйста, измените вопрос, чтобы включить отслеживающий – roganjosh

+0

Я вижу, что вы говорят, но я не верю, что есть модуль под названием .makedir(), может быть, в другой библиотеке, о которой я не знаю? – Mwspencer

+0

Нет, обе части 'os'. Проверьте [документацию] (https://docs.python.org/2/library/os.html). Существует два метода; 'makedir' и' makedirs'. Вы используете множественное число. Я просто не уверен в части 'NoneType', поэтому я спрашиваю о трассировке стека, а не только одной строкой. – roganjosh

ответ

0

Функция os.makedirs не возвращает ничего. Когда вы назначаете возвращаемое значение вызова функции os.makedirs в папку folder_path, оно теперь содержит <class 'NoneType'>. Следующий код должен работать должным образом.

import os 

def save_string_to_folder(new_folder, string): 
    folder_path = 'C:\Users\e6082493\Documents\Improve\Python\Scraping\Folder_%s' % (new_folder) 
    if not os.path.exists(folder_path): 
     os.makedirs(folder_path) # Removed the assignment 
    join_path = os.path.join(folder_path, string) 
    join_path_finish = open(join_path, "w") 
    join_path_finish.close() 


save_string_to_folder('new', 'TextFile.txt') 

От второй раз, папка уже создана, поэтому он не входит в если условие и удалить правильный путь в переменной folder_path