2015-06-12 6 views
1

Я не уверен, почему я получаю эту ошибку, я использую str.join() и os.path.join() в разных точках сценария, это причина?Python: слишком много соединений()?

Использование os.path.join:

from os.path import getsize, dirname, join 

class Wav: 
    src_path = "No path" 
    dest_path = destination 
    old_name = "name.wav" 
    new_name = "" 

    def __init__(self, path): 
     self.src_path = path 
     self.old_name = os.path.split(path) 
     self.new_name = self.old_name 
     self.dest_path = join(destination, self.new_name) # error here 

Вот моя ошибка:

Traceback (most recent call last): 
    File "call.py", line 132, in <module> 
    temp = Wav(temp_path) 
    File "call.py", line 32, in __init__ 
    self.dest_path = join(destination, self.new_name) 
    File "/usr/lib/python2.7/posixpath.py", line 75, in join 
    if b.startswith('/'): 
AttributeError: 'tuple' object has no attribute 'startswith' 

ли это конфликт с str.join() или я не импортировать os.path правильно?

ответ

1
self.dest_path = join(destination, self.new_name) # error here 

self.new_name не является строкой, это кортеж, так что вы не можете использовать его в качестве второго аргумента join. Возможно, вы хотели присоединиться к destination только с последним элементом self.new_name?

self.dest_path = join(destination, self.new_name[1]) 
+0

Конечно, я забыл 'os.path.split()' возвращает кортеж! Спасибо, я запустил строку выше, чтобы старое имя было строкой, а не кортежем, исправляя вещи, созданные с помощью self.old_name. – Will

+0

и не забывайте о 'import pdb' и' pdb.set_trace() 'где необходимо, чтобы проверить, что происходит в вашем коде. – hochl

1

self.new_name является кортеж, а не строка в коде, и os.path.join принимает список строк, а не строку, а список. Вы можете сделать это с

self.dest_path = join(destination, *self.new_name) 

расширить self.new_name в качестве параметров для os.path.join

0
  1. Проверьте, назначения и self.new_name являются списки или. кортежи

кортежей (они выглядят так:

mytup = ('hey','folk') 

) не имеют атрибута StartsWith. Вы должны использовать строки. Чтобы проверить это, просто распечатайте переменные в своей программе.

  1. Я не думаю, что соединение заменяет друг друга, но вы должны попробовать.

    импорт os.path

Написать это под первой импортной линии. Затем замените

присоединиться (..., ...)

с

os.path.join (..., ...)

, если вы хотите использовать ОС .path.

Смежные вопросы