Hay otra cosa que te puede ayudar en la lógica del problema.
Si bien Python no controla los tipos de datos de los argumentos y de los datos retornados por las funciones,
si uno tiene claro que quiere un determinado tipo de datos,
puede especificarlo, sin que esto afecte la ejecución del programa.
Son los "hints" que pueden agregarse a argumentos y retornos de funciones.
Para tu función, sería así:
def inversa(a:str) -> str:
...
Ahí he agregado indicaciones de que se espera un argumento de tipo string,
y se espera que la función retorne un string.
Con eso en mente, basta que verifiques si estás cumpliendo esas condiciones
en la lógica de tu programa.
(1) Cada vez que llames a la función, asegurarte de que el argumento que le estás pasando es de tipo string.
(2) En cada punto en que la función retorna (sentencia return) asegurarte de que realmente se retorna un string.
En ese caso, estoy viendo que dentro de tu función tenés un return que devuelve una lista vacía en algunos casos, en vez de una string vacía.
Eso seguro es fuente de errores en una llamada recursiva.