dpath.utils: TypeError: объект класса типа не имеет len () - PullRequest
0 голосов
/ 23 марта 2020

У меня есть путь. Используя dpath-utils, я создаю словарь, создавая подключи в соответствии с длиной пути. Но в текущем примере длина моего пути коротка, как показано ниже.

примечания : если бы это был длинный путь: "/ cbghb6b2861f919f6ffc238a0c5cffed63436 / bbc238a0c5cffed6343fc238a0c5cffed63436". Я объяснил это потому, что по этой причине я использовал dpath.utils

. Я добавляю путь к соответствующему ключу словаря, используя dpath.utils, как показано ниже.

model_dict = {}
path = "/b6b2861f919f6fc238a0c5cffed63436"
data= {
        'metadata': {
                          'author': None, 
                          'column_name': [...], 
                          'date': datetime.datetime(20...1, 870998), 
         'metrics': {...}, 
         'name': None, 'source_code_version': None}, 
         'model': <src.python.ml.optis...10f4695f8>
        }
 }


dpath.util.set(model_dict, path, data)
model_dict = {
             'b6b2861f919f6fc238a0c5cffed63436':{
                    'metadata': {
                          'author': None, 
                          'column_name': [...], 
                          'date': datetime.datetime(20...1, 870998), 
                    'metrics': {...}, 
                    'name': None, 'source_code_version': None}, 
                    'model': <src.python.ml.optis...10f4695f8>
                   }
             }
dpath.util.get(model_dict, path)

но я получаю эту ошибку при вызове с путем.

Вывод:

 File "/Users/****/Documents/**/src/python/ws/***/restful/**/**.py", line 30, in get_model
    return dpath.util.get(self.persisted_file , path)
 File "/Users/*****/.virtualenvs/*****/lib/python3.7/site-packages/dpath/util.py", line 171, in get
    results = dpath.segments.fold(obj, f, [])
  File "/Users/****/.virtualenvs/******/lib/python3.7/site-packages/dpath/segments.py", line 349, in fold
    for pair in walk(obj):
  File "/Users/******/.virtualenvs/*******/lib/python3.7/site-packages/dpath/segments.py", line 62, in walk
    for found in walk(v, location + (k,)):
  File "/Users/*****/.virtualenvs/*******/lib/python3.7/site-packages/dpath/segments.py", line 62, in walk
    for found in walk(v, location + (k,)):
  File "/Users/******/.virtualenvs/********/lib/python3.7/site-packages/dpath/segments.py", line 48, in walk
    for k, v in kvs(obj):
  File "/Users/*****/.virtualenvs/****/lib/python3.7/site-packages/dpath/segments.py", line 16, in kvs
    return zip(range(len(node)), node)
TypeError: object of type 'RegressionModel' has no len()

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

model_dict.get("b6b2861f919f6fc238a0c5cffed63436")

Выход:

{
        'metadata': {
                          'author': None, 
                          'column_name': [...], 
                          'date': datetime.datetime(20...1, 870998), 
         'metrics': {...}, 
         'name': None, 'source_code_version': None}, 
         'model': <src.python.ml.optis...10f4695f8>
        }
 }
...