#python
Только недавно начал учить python. Задача состоит в том, чтобы создать key-value хранилище. При запуске только с ключом требуется вернуть его значение из файла, если на вход подается ключ и значение то добавить в файл. Ошибка при попытке запустить с ключом и значением. Подскажите в чем проблема? import sys import argparse import os import tempfile import json def create_parser(): parser = argparse.ArgumentParser() parser.add_argument('--key') parser.add_argument('--value') return parser parser = create_parser() namespace = parser.parse_args() str = None if namespace.value is None: storage_filename = os.path.join(tempfile.gettempdir(), 'storage.data') if os.path.exists('storage.data'): with open(storage_filename, 'r') as f: json_string = f.readlines() parsed_str = json.loads(json_string) bool = False for arg in parsed_str[namespace.key]: str = ", " + arg if bool is True else arg bool = True print(str) else: print("File not found") else: storage_filename = os.path.join(tempfile.gettempdir(), 'storage.data') if os.path.exists('storage.date'): with open(storage_filename, 'a') as f: f.write(dict({str(namespace.key): str(namespace.value)})) else: with open(storage_filename, 'w') as f: f.write(dict({str(namespace.key): str(namespace.value)})) Ошибка: C:\Users\Aleksey>python "C:\Users\Aleksey\playground\Key-value хранилище.py" --key Astrakhan --value 1 Traceback (most recent call last): File "C:\Users\Aleksey\playground\Key-value хранилище.py", line 39, inf.write(dict({str(namespace.key): str(namespace.value)})) TypeError: 'NoneType' object is not callable
Ответы
Ответ 1
В Python нет различия между именами функций (в том числе встроенных) и именами переменных. Поэтому, если вы явно перезаписали str значением None, то вы уже не сможете вызвать эту функцию под этим именем. Выход - никогда (даже если очень хочется) не использовать в качестве имен переменных имена встроенных функций, например str, list и т.д. Если заменить в вашем коде имя переменной str, на любое другое (свободное), то все будет работать нормально.
Комментариев нет:
Отправить комментарий