Foros del Web » Programando para Internet » Python »

Por que me sale esto ? :TypeError: 'dict' object is not callable

Estas en el tema de Por que me sale esto ? :TypeError: 'dict' object is not callable en el foro de Python en Foros del Web. Hola que tal, apenas hoy es mi primer dia en python, me he bajado un libro, llamado Python para todos, donde venia un ejemplo, lo ...
  #1 (permalink)  
Antiguo 27/06/2011, 01:58
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Pregunta Por que me sale esto ? :TypeError: 'dict' object is not callable

Hola que tal, apenas hoy es mi primer dia en python, me he bajado un libro, llamado Python para todos, donde venia un ejemplo, lo corro y me da el siguiente error:

Cita:
saludar("fr")()
File "C:\Users\fernando\workspace\probando\src\revistie ndoobjetos.py", line 22, in saludar
return lang_func(lang)
TypeError: 'dict' object is not callable
El codigo es el siguiente:

Código Python:
Ver original
  1. #!/usr/bin/env python
  2. #-*- coding: UTF-8 -*-
  3. '''
  4. Created on 26/06/2011
  5.  
  6. @author: fernando
  7. '''
  8. def saludar(lang):
  9.     def saludar_es():
  10.         print "Hola"
  11.    
  12.     def saludar_en():
  13.         print "Hi"
  14.    
  15.     def saludar_fr():
  16.         print "Salut"
  17.  
  18.     lang_func = {"es": saludar_es(),
  19.                  "en": saludar_en(),
  20.                  "fr": saludar_fr()}
  21.    
  22.     return lang_func(lang)
  23. saludar("fr")()


Intente modificarlo,sacando los metodos de saludar(lang) por que pense que a lo mejor porque no podia retornar, por algunas cosas que vi en internet, es que por la API , lanzaba esa excepcion, intente modificarlo de esa manera, sacando los metodos, quitandole el return y asigarlo en una variable, pero aun asi el problema persiste.

Otra cosa que vi, que cuando intento correrlo, me aparece los mensajes de los metodos anteriores, ¿eso a que se debe, si yo nunca los estoy invocando?

Ese ejemplo se puede ver en Python para todos, lo deje igual.
Saludos y gracias por la ayuda.

Última edición por AlvaroG; 27/06/2011 a las 08:42 Razón: coloreado de sintaxis
  #2 (permalink)  
Antiguo 27/06/2011, 08:44
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Por que me sale esto ? :TypeError: 'dict' object is not callable

Este es el ejemplo original
Código Python:
Ver original
  1. def saludar(lang):
  2.     def saludar_es():
  3.         print "Hola"
  4.  
  5.     def saludar_en():
  6.         print "Hi"
  7.  
  8.     def saludar_fr():
  9.         print "Salut"
  10.  
  11.     lang_func = {"es": saludar_es,
  12.                  "en": saludar_en,
  13.                  "fr": saludar_fr}
  14.     return lang_func[lang]
  15.  
  16. saludar("fr")()

Primero tienes errores en el indentado.
Después en el diccionario lang_func los valores de las llaves son funciones no llamadas a funciones.
Por ultimo cuando retornas return lang_func(lang) deben de ser corchetes [] por que estas accediendo a un diccionario
  #3 (permalink)  
Antiguo 27/06/2011, 08:47
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Por que me sale esto ? :TypeError: 'dict' object is not callable

Literalmente y de forma simple: has pasado un diccionario cuando deberías haber pasado una función.

Fijate en la línea 22: has llamado al diccionario lang_func como a una función. esto es porque has usado (lang) en vez de [lang]. Por otro lado, no creo que funcione como querés. En el diccionario, las funciones no deben ir con el () al final. de lo contrario, en vez de asignar el objeto función a esa clave del diccionario, estás asignando el resultado de ejecutar esa función (como no tienen return, será None).

Esto lo verás facilmente si intentas ejecutar saludar("en")(): te devolverá un error parecido a "NoneType is not callable".

Se arregla eliminando los paréntesis al final del nombre de función en las líneas 18, 19 y 20.

A propósito: asegurate de usar la etiqueta HIGHLIGHT (hay un menú desplegable en el cuadro de edición de mensaje) para que el código se resalte apropiadamente.


Saludos.


Edito: razpeitia, ¡dejame contestar algo!... me caes mal
  #4 (permalink)  
Antiguo 27/06/2011, 09:08
Fsg
 
Fecha de Ingreso: junio-2009
Mensajes: 155
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Por que me sale esto ? :TypeError: 'dict' object is not callable

Disculpa, ya tenia el indentado,cuando lo pegue fue cuando se cambio, lo tendre en cuenta al citar otro codigo.

Muchas gracias por la respuesta, era algo muy basico , pero voy aprendiendo en mi primer dia con python =), gracias por su rapida respuesta.

Saludos

Etiquetas: object
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:41.