¿Cómo hacer que “int” analice cadenas en blanco?

Tengo un sistema de análisis de registros de texto de longitud fija basado en una tabla de diseño:

parse_table = [\ ('name', type, length), .... ('numeric_field', int, 10), # int example ('textc_field', str, 100), # string example ... ] 

La idea es que, dada una tabla para un tipo de mensaje, simplemente repaso la cadena y reconstruyo un diccionario a partir de ella, de acuerdo con las entradas de la tabla.

Ahora puedo manejar cadenas y enteros apropiados, pero int() no analizará los campos de todos los espacios (por una buena razón, por supuesto).

Quería manejarlo definiendo una subclase de int que maneje cadenas en blanco. De esta manera, podría ir y cambiar el tipo de entradas de tabla apropiadas sin introducir kludges adicionales en el código de análisis (como filtros), y “simplemente funcionaría”.

Pero no puedo averiguar cómo anular el constructor de un tipo incorporado en un subtipo, ya que la definición del constructor en la subclase no parece ayudar. Siento que me estoy perdiendo algo fundamental aquí acerca de cómo funcionan los tipos incorporados de Python.

¿Cómo debo abordar esto? También estoy abierto a alternativas que no agregan demasiada complejidad.

Utilice una función de fábrica en lugar de int o una subclase de int:

 def mk_int(s): s = s.strip() return int(s) if s else 0 

Utilice la función int() con el argumento s.strip() or 0 , es decir:

 int(s.strip() or 0) 

O si sabe que la cadena siempre contendrá solo caracteres de dígitos o está vacía ( "" ), entonces simplemente:

 int(s or 0) 
 lenient_int = lambda string: int(string) if string.strip() else None #else 0 #else ??? 

tenga en cuenta que mylist es una lista que contiene:

Tuplas, y dentro de tuplas, hay I) valores nulos / vacíos, ii) dígitos, números como cadenas, así como iii) listas vacías / nulas. por ejemplo:

 mylist=[('','1',[]),('',[],2)] 

@Arlaharen Estoy repitiendo aquí, su solución, de manera algo diferente, para agregar palabras clave, porque, perdí mucho tiempo, ¡para encontrarlo!

La siguiente solución es eliminar / convertir cadenas nulas, cadenas vacías o, de lo contrario, listas vacías, como cero, PERO mantener cadenas no vacías, listas no vacías, que incluyen dígitos / números como cadenas, y luego convertir estas cadenas, como números / dígitos

Solución simple. Tenga en cuenta que “0” puede ser reemplazado por variables iterables. Tenga en cuenta que la primera solución no puede TRATAR listas vacías dentro de tuplas.

 int(mylist[0][0]) if mylist[0][0].strip() else 0 

Encontré una forma aún más sencilla, que TI puede tratar listas vacías en una tupla

 int(mylist[0][0] or '0') 

convertir cadena en dígitos / convertir cadena en número / convertir cadena en entero tiras vacías listas / tira cadena vacía / tratar cadena vacía como dígito / número convertir cadena nula como dígito / número / convertir cadena nula como entero