Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
Comportamiento de str.isdigit() al manejar cadenas

Suponiendo lo siguiente:

 >>> square = '²' # Superscript Two (Unicode U+00B2) >>> cube = '³' # Superscript Three (Unicode U+00B3)

Curiosamente:

 >>> square.isdigit() True >>> cube.isdigit() True

OK, vamos a convertir esos "dígitos" a enteros:

 >>> int(square) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '²' >>> int(cube) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '³'

¡Ups!

¿Alguien podría explicar qué comportamiento debo esperar del método str.isdigit() al manejar cadenas?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

str.isdigit no pretende estar relacionado con la capacidad de análisis como int . Está informando una propiedad Unicode simple, es un carácter decimal o un dígito de algún tipo:

str.isdigit()

Devuelve True si todos los caracteres de la cadena son dígitos y hay al menos un carácter, False en caso contrario. Los dígitos incluyen caracteres decimales y dígitos que necesitan un tratamiento especial, como los dígitos en superíndice de compatibilidad. Esto cubre dígitos que no se pueden usar para formar números en base 10, como los números de Kharosthi. Formalmente, un dígito es un carácter que tiene el valor de propiedad Numeric_Type=Digit o Numeric_Type=Decimal.

En resumen, str.isdigit es completamente inútil para detectar números válidos. La solución correcta para verificar si una cadena dada es un entero legal es llamar a int y capturar el ValueError si no es un entero legal. Cualquier otra cosa que haga será (mal) reinventar las mismas pruebas que realiza el código de análisis real en int() , entonces, ¿por qué no dejar que haga el trabajo en primer lugar?

Nota al margen: está utilizando el término "utf-8" incorrectamente. UTF-8 es una forma específica de codificar Unicode y solo se aplica a datos binarios sin procesar. El str de Python es un tipo de texto Unicode "idealizado"; no tiene codificación (debajo del capó, se almacena codificado como uno de ASCII, latin-1, UCS-2, UCS-4 y posiblemente también UTF-8, pero nada de eso es visible en la capa de Python fuera de las mediciones indirectas como sys.getsizeof , que solo sugiere la codificación subyacente al permitirle ver cuánta memoria consume la cadena). Los caracteres de los que está hablando son caracteres Unicode simples por encima del rango ASCII, no son específicamente UTF-8.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda