2015-10-01 3 views
1

Следующий простой код Python во второй итерации дает мне ошибку: «str» не может быть вызвана.Объект не является вызываемой ошибкой при переназначении строкового значения

for i in range(1,3): 
    print(i) 
    str1="onestring"; 
    str3="thirdstring"; 
    str=str1+str(i)+str3; 
    print(str); 

Как я могу решить эту проблему?

ответ

2

В качестве имени переменной вы использовали str. Таким образом, скрывается встроенный. Затем вы пытаетесь вызвать переменную в своем собственном определении str(i).

Использование имен встроенных компонентов для переменных - это плохая идея, как вы только что видели. Это возможно исключительно для очень продвинутой цели замены встроенного в вашу собственную версию.

Вы можете увидеть следующий простой пример на работе здесь http://ideone.com/z70iRn

orig_str = str 

def my_str(o): 
    print("str called") 
    return orig_str(o) 

str = my_str 

print(str(0)) 
0

Ответ оказывается простым. Переменная «str» используется как имя переменной, так и функция. Изменение имени переменной «str» на любое другое имя решает проблему.

0

измените переменную str, поскольку она является встроенной переменной Python.

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