@pcdesign

Как победить ошибку «OverflowError: signed integer is greater than maximum»?

Вот документация по flask-mongoengine
docs.mongoengine.org/projects/flask-mongoengine/en...

И там есть параграф с паджинацией:

paginated_todos = Todo.objects.paginate(page=page, per_page=10)


Все отлично работает, на страницы разбивается.
Но, если ввести какое-нибудь здоровенное число для page (например, 220000000000), то получим ошибку
OverflowError: signed integer is greater than maximum


Если еще больше, page=22000000444444444444444444444440000, то ошибка
Python int too large to convert to C long

Вопрос. Можно ли как-то обойтись без
try:
     paginated_todos = Todo.objects.paginate(page=page, per_page=10)
except:
     abort(404)

?
Чтобы каждый раз не оборачивать в трай разбивку на страницы?

P.S.

Flask-SQLAlchemy - оказывается тем же самым страдает.
  • Вопрос задан
  • 826 просмотров
Решения вопроса 1
LaRN
@LaRN
Senior Developer
Можно написать функцию по аналогии с приведенной doc-ой:
# Paginate through todo
def view_todos(page=1):
paginated_todos = Todo.objects.paginate(page=page, per_page=10)

И внутри этой функции делать проверку на наличие ошибки
def view_todos(page=1):
try:
return Todo.objects.paginate(page=page, per_page=10)
except:
abort(404)

А дальше везде в вашем коде использовать уже функцию view_todos, тогда код клонировать не придется.
По сути получается декоратор к функции пагинации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы