2014-02-13 1 views
0

Я пишу эту процедуруPython, os.listdir() ошибка

def get_special_paths(dir): 
    detected_paths = [] 
    paths = os.listdir(dir) 
    for path in paths: 
     if path == r'__\w+__': 
      detected_paths.append(path) 
    for element in detected_paths: 
     index = detected_path.index(element) 
     detected_paths[index] = os.path.abspath(element) 
    return detected_paths 

и это вызывает ошибку типа АА, как показано ниже:

Traceback (most recent call last): 
    File"copyspecial.py", line 65, in <module> 
    get_special_paths(dir) 
    File"copysepcial.py", line 23, in get_special_paths 
    paths = os.listdir(pathname) 
TypeError: coercing to Unicode: need string or buffer, builtin_function_or_method found 

Что смысл этой ошибки и как я почини это? Заранее спасибо :)

+1

Я полагаю, что вы проходите как 'dir' в функции не является строкой. На самом деле есть встроенная функция, названная именно так, 'dir'. – 9000

+0

проверить, если dir - строка, также проверить преобразование директории в строку – Sar009

ответ

4

Похоже, вы прошли встроенную функцию dir к get_special_paths

>>> dir 
<built-in function dir> 

>>> os.listdir(dir) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: coercing to Unicode: need string or buffer, builtin_function_or_method found 

Пройди путь как строки.

get_special_paths('/path/to/dir') 

BTW, не используйте dir в качестве имени переменной. Он будет затенять вышеуказанную функцию dir.

+0

вам действительно не нужно больше минуты! –

+0

На самом деле, я изменил имя переданного значения формы dir на pathname, но это та же ошибка! – moostahfah

+0

@ user3305277, вы передали его как строковый объект? (не 'dirname', но' 'dirname'' или' 'dirname") – falsetru

0

Может быть, потому что global_path не определен здесь:

for element in detected_paths: 
    index = detected_path.index(element) # Here detected_path is undefined 

сделать global_paths и попробовать:

for element in detected_paths: 
    index = detected_paths.index(element)