Нет ошибки при передаче str при типе поля int? - PullRequest
1 голос
/ 19 марта 2020

Я проверяю данные в словаре. Я указываю, что поле age имеет тип int, но на практике возраст, который я передаю, имеет тип str. Почему нет ошибки?


from marshmallow import Schema, fields


class UserSchema(Schema):
    name = fields.Str()
    age = fields.Int()


user_data = {
    "name": "Ken",
    "age": "12"
}

try:
    UserSchema().load(user_data)
except Exception as e:
    print(e)

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Я бы предположил, что marshmallow.fields в какой-то момент неявно анализирует age в int и не выдает никаких исключений, потому что "12" хорошо конвертируется в 12. Когда я запускаю ваш код, это именно то, что происходит , name - это «Кен», а age - 12. Если я поменяю «12» на «12а», тогда он вернет исключение, как и следовало ожидать.

1 голос
/ 24 марта 2020

По умолчанию зефир преобразует "12" в int.

Если вы хотите убедиться, что это int, а не строка, используйте параметр strict.

https://marshmallow.readthedocs.io/en/stable/api_reference.html#marshmallow .fields.Integer

строгий - при значении True допустимы только целочисленные типы. В противном случае допустимо любое значение, преобразуемое в int.

class UserSchema(Schema):
    name = fields.Str()
    age = fields.Int(strict=True)
...