sys.get_int_max_str_digits() și set_int_max_str_digits() în Python

Interpretorul (sys) Python 3.11+

Limita de cifre la conversia dintre texte și numere întregi foarte mari.

Sintaxă
sys.get_int_max_str_digits()
sys.set_int_max_str_digits(n)

Ce face sys.get_int_max_str_digits() și set_int_max_str_digits()

Conversia unui text cu sute de mii de cifre în int (sau invers) durează mult, iar un atacator ar putea trimite astfel de numere ca să blocheze un server. De aceea Python limitează implicit conversia la 4300 de cifre și aruncă ValueError peste limită. Calculele cu întregi mari nu sunt afectate, doar conversiile în baza 10.

set_int_max_str_digits(n) schimbă limita (0 = fără limită). Limita se poate seta și cu variabila de mediu PYTHONINTMAXSTRDIGITS.

Parametri

Parametru Descriere
n Numărul maxim de cifre (cel puțin 640, sau 0).

Ce returnează

get_*: întreg.

Exemple

Exemplul 1: Numere foarte mari

import sys
print(sys.get_int_max_str_digits())
mare = 10 ** 5000
try:
    str(mare)
except ValueError as e:
    print("Eroare:", str(e)[:60])
sys.set_int_max_str_digits(10_000)
print(len(str(mare)))

Rezultat

4300
Eroare: Exceeds the limit (4300 digits) for integer string conversio
5001

Greșeli frecvente

  • Dezactivezi limita (0) într-un server care primește numere de la utilizatori și îl expui la blocaje.

Comenzi înrudite

  • int(): Tipul numerelor întregi; int() transformă un text sau un număr zecimal în număr întreg.
  • str(): Tipul textelor (șiruri de caractere); str() transformă orice valoare în text.