Saltar al contenido

Cómo convertir Nonetype a int o string?

Hola usuario de nuestro sitio web, hallamos la solución a lo que buscabas, deslízate y la hallarás a continuación.

Solución:

int(value or 0)

Esto usará 0 en el caso de que proporcione cualquier valor que Python considere Falsecomo Ninguno, 0, []””, etc. Dado que 0 es Falsesolo debe usar 0 como valor alternativo (de lo contrario, sus 0 se convertirán en ese valor).

int(0 if value is None else value)

Esto reemplaza solo None con 0. Ya que estamos probando para None específicamente, puede usar algún otro valor como reemplazo.

En uno de los comentarios dices:

De alguna manera obtuve un valor de tipo Ninguno, se suponía que era un int, pero ahora es un objeto de tipo Ninguno.

Si es su código, descubra cómo está obteniendo None cuando esperas un número y te detienes ese de suceder.

Si es el código de otra persona, averigüe las condiciones bajo las cuales da None y determine un valor razonable para usar para eso, con el código condicional habitual:

result = could_return_none(x)

if result is None:
    result = DEFAULT_VALUE

…o incluso…

if x == THING_THAT_RESULTS_IN_NONE:
    result = DEFAULT_VALUE
else:
    result = could_return_none(x) # But it won't return None, because we've restricted the domain.

No hay razón para usar automáticamente 0 aquí — soluciones que dependen del “false”-ness de None asume que querrás esto. Él DEFAULT_VALUE (si es que existe) depende completamente del propósito de su código.

Una forma común “Pythonic” de manejar este tipo de situación se conoce como EAFP por “Es más fácil pedir perdón que permiso“. Lo que generalmente significa escribir código que asume que todo está bien, pero luego envolverlo con un try...except bloque para manejar las cosas, por si acaso, no lo es.

Aquí está ese estilo de codificación aplicado a su problema:

try:
    my_value = int(my_value)
except TypeError:
    my_value = 0  # or whatever you want to do

answer = my_value / divisor

O quizás el aún más simple y un poco más rápido:

try:
    answer = int(my_value) / divisor
except TypeError:
    answer = 0

El enfoque inverso y más tradicional se conoce como LBI Lo que significa “Mira antes de saltar” es lo que han sugerido @Soviut y algunos de los otros. Para una cobertura adicional de este tema, vea mi respuesta y los comentarios asociados a la pregunta Determinar si un key está presente en un diccionario en otra parte de este sitio.

Un problema potencial con EAFP es que puede ocultar el hecho de que algo anda mal con alguna otra parte de su código o módulo de terceros que está utilizando, especialmente cuando las excepciones ocurren con frecuencia (y por lo tanto no son realmente casos “excepcionales” en absoluto).

Reseñas y calificaciones

Agradecemos que quieras sostener nuestro trabajo dejando un comentario y valorándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *