2010-02-13 3 views
2

Я продолжаю получать эту ошибку для части моего кода.Python: Справка с UnboundLocalError: указана локальная переменная до назначения

Traceback (most recent call last): 
File "./mang.py", line 1688, in <module> 
files, tsize = logger() 
File "./mang.py", line 1466, in logger 
nl = sshfile(list, "nl") 
UnboundLocalError: local variable 'sshfile' referenced before assignment 

Я не поставил код, потому что он идет вперед и назад между функциями. Мне интересно, может ли кто-нибудь сказать мне, почему python выплевывает эту ошибку? sshfile не является переменной, это класс.

+2

Вам нужно будет опубликовать хотя бы часть кода, если вы хотите ничего, кроме диких догадок. –

+0

Если определение класса не существует в области, в которой вы его используете, Python будет называть его локальной переменной. Поэтому проблема в том, что так или иначе это определение класса не произошло. –

ответ

1

Возможно, вы не импортировали файл, содержащий определение sshfile, или вам нужно присвоить имя класса с именем пакета. Это зависит от того, как вы его импортировали.

Какой пакет он исходит? Где это определено?


Update

Для тех, кто еще читает это, после обсуждения в комментариях выяснилось, что проблема заключалась в том, что имя sshfile было использовано дальше вниз в функции в качестве имени переменной, например:

class sshfile: 
    pass 

def a(): 
    f = sshfile() # UnboundLocalError here 
    sshfile = 0 

a() 

Решение состоит в том, чтобы не использовать имя переменной, которое скрывает имя класса, которое необходимо использовать.

+0

определяется непосредственно ниже функции регистрации. Его не часть пакета, его функция i закодирована. Я не знаю, что вы имеете в виду, если присвоить имя класса. Этот код работал нормально, пока я не внес некоторые изменения, но я никогда не касался этой части кода. – Incognito

+2

Это функция, которую вы закодировали? Прежде чем ты сказал, что это класс. Было бы очень полезно, если бы вы могли извлечь соответствующие строки кода в новый файл, возможно, сделать 10 строк простейшим возможным самодостаточным примером, демонстрирующим ошибку, и опубликовать это. Удалите весь код, который не является необходимым для демонстрации ошибки. –

+0

Я собирался опубликовать какой-то урезанный код, за исключением того, что ошибка не отображается в урезанной версии. – Incognito

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