Se que Python es de tipado débil, pero quizás en algunos momentos necesitemos obligarle a que sea de un tipo. Conozco los casteos str(), int(), etc… Pero tengo una duda. Si yo declaro una función de esta manera:
def what(x:str, y:int):
return x + y
if __name__=="__main__":
print(what(1, 3))
En la definición, ¿no le estoy obligando con x:str a que solo acepte como argumentos string o int?. No salta errores y hace la suma correctamente.
Puedes usar el decorador validate_vall de la libreria Pydantic en las funciones para restringir que solo puedan ser los tipo que tu has establecido en las anotaciones
solo quería comentar que Python es, de hecho, fuertemente tipado. En Python los tipos también son dinámicos, es decir, las variables pueden cambiar el tipo en runtime, que es un poco lo que te está pasando a ti.
Los strings se pueden sumar (concatenación). “x” puede ser un string, el problema vendrá cuando intentes sumar un entero a un string, te dará un TypeError porque Python es fuertemente tipado y no hay una conversión implícita entre tipos como sí puede pasar entre lenguajes débilmente tipados como C o PHP.
Respecto a cómo gestionarlo, chaotic_light te ha dado una buena sugerencia, tendrás que hacerlo manualmente.