2011-05-13 21 views
18

Estoy intentando definir una función básica en python pero siempre obtengo el siguiente error cuando ejecuto un programa de prueba simple;error de función no definida en Python

>>> pyth_test(1, 2) 

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    pyth_test(1, 2) 
NameError: name 'pyth_test' is not defined 

Aquí está el código que estoy usando para esta función;

def pyth_test (x1, x2): 
    print x1 + x2 

ACTUALIZACIÓN: Tengo el script llamado pyth.py abierta, y luego estoy escribiendo en pyth_test (1,2) en el intérprete cuando se da el error.

Gracias por la ayuda. (Me disculpo por la pregunta básica, nunca he programado antes y estoy tratando de aprender Python como un hobby)


import sys 
sys.path.append ('/Users/clanc/Documents/Development/') 
import test 


printline() 



## (the function printline in the test.py file 
##def printline(): 
## print "I am working" 
+0

Si su llamada a la función es en la línea 1, entonces, ¿dónde está la definición de la función? – detly

+0

El código que arroja un error parece que está en una sesión interactiva, pero el código de la función parece que es parte de un archivo. ¿Está bien? Si es así, ¿cómo importó el archivo en la sesión interactiva? Edite su pregunta y agregue más código para mostrar la sesión interactiva completa. (El botón de edición está en la parte inferior de la pregunta, debajo de las etiquetas). – senderle

Respuesta

23

Sí, pero ¿en qué archivo se pyth_test 's definición declarada en? ¿También se encuentra antes de que se llame?

Editar:

Para ponerlo en perspectiva, cree un archivo llamado test.py con el siguiente contenido:

def pyth_test (x1, x2): 
    print x1 + x2 

pyth_test(1,2) 

Ahora ejecute el siguiente comando:

python test.py 

Debería ver el salida que deseas. Ahora bien, si usted está en una sesión interactiva, debe ir como esto:

>>> def pyth_test (x1, x2): 
...  print x1 + x2 
... 
>>> pyth_test(1,2) 
3 
>>> 

espero que esto explica cómo funciona la declaración.


Para darle una idea de cómo funciona el diseño, crearemos algunos archivos. Crear una nueva carpeta vacía para mantener las cosas limpias con lo siguiente:

myfunction.py

def pyth_test (x1, x2): 
    print x1 + x2 

program.py

#!/usr/bin/python 

# Our function is pulled in here 
from myfunction import pyth_test 

pyth_test(1,2) 

Ahora si ejecuta:

python program.py 

lo que imprimirá 3. Ahora, para explicar lo que salió mal, vamos a modificar nuestro programa de esta manera:

# Python: Huh? where's pyth_test? 
# You say it's down there, but I haven't gotten there yet! 
pyth_test(1,2) 

# Our function is pulled in here 
from myfunction import pyth_test 

Ahora vamos a ver lo que sucede:

$ python program.py 
Traceback (most recent call last): 
    File "program.py", line 3, in <module> 
    pyth_test(1,2) 
NameError: name 'pyth_test' is not defined 

Como se ha señalado, pitón no puede encontrar el módulo por los motivos descritos anteriormente. Por esa razón, debe mantener sus declaraciones en la parte superior.

Ahora bien, si se corre la sesión interactiva de Python:

>>> from myfunction import pyth_test 
>>> pyth_test(1,2) 
3 

aplica el mismo proceso. Ahora, la importación de paquetes no es tan simple, así que le recomiendo que consulte cómo . ¡Espero que esto ayude y buena suerte con tus aprendizajes!

+0

Gracias. Eso es útil y funciona. ¿Cómo podría llamar al script desde otro script o en la sesión interactiva? Entonces, si tuviera cerrado el archivo test.py, ¿cómo ejecutaría la función pyth_test? ¡Gracias! –

+0

@ user751698 Por favor, compruebe la explicación que proporcioné en línea. Con suerte, debería romper las cosas y, por favor, recuerde comprobar el enlace al final. –

+0

Puedo hacer que funcione su ejemplo y leo la documentación de los módulos, pero tengo problemas para agregar una ruta a sys.path. Guardé un archivo test.py en un directorio llamado "desarrollo" y estoy tratando de agregarlo a sys.path para poder importar una función de mi script actual llamado index.py. He agregado el código al final de la publicación original. –

1

funciona para mí:

>>> def pyth_test (x1, x2): 
...  print x1 + x2 
... 
>>> pyth_test(1,2) 
3 

Asegúrese de definir la función antes lo llamas.

0

Ayudaría si mostrara el código que está utilizando para el programa de prueba simple. Poner directamente en el intérprete esto parece funcionar.

>>> def pyth_test (x1, x2): 
...  print x1 + x2 
... 
>>> pyth_test(1, 2) 
3 
>>> 
1

En las funciones de python no se puede acceder de forma mágica desde cualquier lugar (como en, por ejemplo, php). Ellos deben ser declarados primero. Así que esto va a funcionar:

def pyth_test (x1, x2): 
    print x1 + x2 

pyth_test(1, 2) 

Pero esto no:

pyth_test(1, 2) 

def pyth_test (x1, x2): 
    print x1 + x2 
0

si se trabaja con la versión instalada ociosa de Python

>>>def any(a,b): 
... print(a+b) 
... 
>>>any(1,2) 
3 
Cuestiones relacionadas