2015-08-10 4 views
0

Я начинаю переменную глобально, тогда, когда я иду, чтобы изменить переменную, ее тип переходит из словаря (хорошего) в строку (плохо), и я уверен, почему, но не совсем. Я не на 100% занимаюсь просмотром python.переменное изменение типа от глобальной переменной до переменной метода почему?

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

totalEntries = 0 
print 'this is first ' + str((type(totalEntries))) #prints type int (good) 
perPage = 0 
currentPage = 1 
Pcity = '' 

api_data = '' 
is_last_page = False 
apiCallNum = 1 
tableDefined = False 


def getApiData(city): 
    global Pcity 
    global apiCallNum 
    global apiEndpoint 
    Pcity = city 
    apiEndpoint = #just a link ignore this 

    api_data = requests.get(apiEndpoint).json() 
    print(api_data) 
    print('your testing this' + str(type(api_data))) #prints dict (good) 

    print ("Current API Call " + str(apiCallNum)) 

    apiCallNum += 1 



    print('your testing this' + str(type(api_data))) #prints dict (good) 


def populateVars(): 
    global totalEntries 

    print "this is second " + str(type(totalEntries)) #prints int (good) 

    print('your testing this' + str(type(api_data))) #prints string (bad) 
    totalEntries = api_data['total_entries'] 

спасибо все

ответ

2

присвоений, сделанные api_data внутри getApiData не будет виден в другом месте, потому что вы не пометить его как глобальный.

Добавить global api_data в начало getApiData.

Кстати, вам нужно всего лишь глобальный оператор, если вы хотите назначить глобальную переменную - вы можете получить доступ к своим значениям без штрафа. Поэтому, строго говоря, вам не нужен global apiEndpoint.

+1

спасибо Кевин. Кроме того, то, что я сделал после расслабления на мгновение, было initalize api_data как пустой словарь. Когда я тестировал тип, последний тип теста выходил как дубликат. Теперь у меня есть новая проблема, которая отображается как totalEntries = api_data ['total_entries'] KeyError: 'total_entries' –

+0

Я собираюсь попытаться выяснить, почему это так, в противном случае я обновлю этот вопрос. Кевин благодарит вас за помощь –

+0

@ChristopherJakob. Если у вас есть новый вопрос - лучший план/способ, которым вы должны это сделать, - это отметить это решение и открыть новый с новой проблемой. –

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