Python: как писать для чтения и записи в глобальную переменную - PullRequest
0 голосов
/ 31 мая 2019

Попытка чтения и записи в глобальную переменную изнутри оператора if / else, но с ошибкой

SyntaxError: имя 'PREV_HASH' назначено перед глобальным объявлением

Я пытался использовать глобальный синтаксис, но не могу заставить его работать.Не используется для глобальных локальных переменных v в python

PREV_HASH = ''
LOGFILE_DIRECTORY = 'c:\\securelog\\securelog_logs\\'
ARCHIVE_FOLDER = 'c:\\securelog\\securelog_archive\\'
WORKFILES_FOLDER = 'c:\\securelog\\securelog_workfiles\\'
TMP_FOLDER = 'c:\\securelog\\processed\\'
COMPLETED_FOLDER = 'c:\\securelog\\completed\\'

CHAIN_FILE = WORKFILES_FOLDER + 'chain_info.txt'



#check if this is the first run, if it is hardcode the block & previous hash and pass the hash 
if chain_list[0] == 1:
    fileHandle = open (CHAIN_FILE, 'r+')
    fileHandle.write('1,0,' + hasher.hexdigest())
    fileHandle.close()
    global PREV_HASH
    PREV_HASH = hasher.hexdigest()
    #print("1 previous hash is: " + str(PREV_HASH))
else:
    #update list with hash of current and previous block
    ###del (chain_list[1:])
    global PREV_HASH
    chain_list.insert (1,PREV_HASH)
    print("2 previous hash is: " + str(PREV_HASH))
    chain_list.insert (2,hasher.hexdigest())
    fileHandle = open (CHAIN_FILE, 'a')
    print('2 what is the chain list at this point:' + str(chain_list))

    #Write the contents of the list to the chain file on a new line and separate with a comma
    fileHandle.write(',' + str(chain_list[2]))
    fileHandle.close()

    PREV_HASH = hasher.hexdigest()

Я ожидаю, что при первом запуске скрипта будет создан новый файл, содержащий одну строку с 1, 0 и сгенерированный ключ хешана предыдущем шаге ("hasher.hexdigest ()") Затем этот хеш будет сохранен в глобальной переменной PREV_HASH

Затем при втором запуске файл будет обновлен новой строкой из списка.Он будет содержать увеличенный номер, предыдущий хеш и текущий хеш

2, предыдущий #, текущий #

При удалении глобального PREV_HASH я получаю следующий вывод

>file does not exist
>-----------------
>24
>1--2019-05-31-archive.zip
>what is the chain list at this point:[1, 0, 0]
>1 previous hash is:

>C:\Python>"SL Proof of Concept.py"
>-----------------
>17
>2--2019-05-31-archive.zip
>what is the chain list at this point:[2, '0', '01d056902f77f5a247f639d363b67827d762d72f9738498989d417563c504a3f82f7b44d7e827cd35843545d33856c85']
>2 previous hash before insert is:
>2 what is the chain list at this point:[2, '', '93fcc831b99a8de59063924a994bf81d09dc677b635e32fc133747ca564bfa843fa6bf60274feeb372a5eeb6f406a120', '0', '01d056902f77f5a247f639d363b67827d762d72f9738
498989d417563c504a3f82f7b44d7e827cd35843545d33856c85']

1 Ответ

1 голос
/ 31 мая 2019

Если этот код находится на верхнем уровне файла, просто удалите эти global операторы.

Если этот код находится внутри чего-либо, вам нужно поставить global перед первым присваиванием, в первой строке. (PREV_HASH = '')

...