Разрешить неизвестные значения

Я использую дуршлаг при десериализации ответа JSON. Есть поле, которое настроено на использование только чисел, но иногда ответ имеет нулевое или нечисловое значение для этого поля, и тогда мое приложение выдает недопустимую ошибку. Есть ли способ, которым я мог бы обработать это в моей программе, чтобы дать значение по умолчанию, скажем, NA, в поле. Вот пример, чтобы объяснить ситуацию:

Это образец:

class SampleClass(colander.MappingSchema):
    name = colander.SchemaNode(colander.String())
    testMark  = colander.SchemaNode(colander.Float(), missing=None)


class Sample(colander.MappingSchema):
    type = colander.SchemaNode(colander.String())
    student = colander.SampleStudent()

I want the following JSON to be accepted and not throw error for testMark as null

{  
   "type":"test",
   "student":{  
      "name":"a name",
      "testMark":null
   }
}

Приношу свои извинения, если что-то не так в коде, я впервые в Python. Надеюсь, я прояснил сценарий. Я хотел бы дать полю testMark значение по умолчанию, скажем NA, всякий раз, когда тестовая отметка не является числом.

PS Это всего лишь пример сценария, здесь невозможно опубликовать фактический сценарий.

1 ответ

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

http://docs.pylonsproject.org/projects/colander/en/latest/extending.html

class MyFloat(colander.Float):

    def deserialize(self, node, cstruct):
        if isinstance(cstruct, float):
            return cstruct
        else:
            return null

Я не проверял это, но я надеюсь, что вы поняли идею.

Другие вопросы по тегам