2010-06-26 14 views
8

Estoy usando Python 2.5.4 y estoy tratando de usar el módulo decimal. Cuando lo uso en el intérprete, no tengo ningún problema. Por ejemplo, esto funciona:En Python, ¿cómo se usa el módulo decimal en un script en lugar del intérprete?

>>> from decimal import * 
>>> Decimal('1.2')+ Decimal('2.3') 
Decimal("3.5") 

Pero, cuando pongo el siguiente código:

from decimal import * 
print Decimal('1.2')+Decimal('2.3') 

en un archivo separado (llamado decimal.py) y ejecutarlo como un módulo, el intérprete se queja:

NameError: name 'Decimal' is not defined

también intenté poner este código en un archivo separado:

import decimal 
print decimal.Decimal('1.2')+decimal.Decimal('2.3') 

Cuando corro como un módulo, el intérprete dice:

AttributeError: 'module' object has no attribute 'Decimal'

¿Qué está pasando?

+0

¿Está seguro de que la secuencia de comandos se ejecuta con la misma versión de Python que su intérprete interactivo? Intenta poner un 'print sys.version' si quieres verificarlo. –

+9

Tal vez se ha creado un archivo llamado 'decimal.py' que se importa en lugar de una orden interna –

+0

Intenté funcionar en mi script de Python: import sys sys.version de impresión y sí, el intérprete no decir que es la misma versión. Creo que solo tengo una versión instalada en mi computadora. – jack

Respuesta

17

ha asignado el nombre decimal.py guión, como el directorio de la secuencia de comandos se encuentra en la primera en el camino los módulos se buscan, su script se encuentra e importa. No tiene nada llamado Decimal en su módulo que hace que se levante esta excepción.

Para resolver este problema, simplemente cambie el nombre de la secuencia de comandos, siempre que juegue algo como foo.py, bar.py, baz.py, spam.py o eggs.py es una buena opción para un nombre.

+0

+1 Aunque OP aún no ha respondido, mi dinero también está en esto. Este es un problema que sucede con demasiada frecuencia. – tzot

+1

Gracias gnibbler y Daslch. – jack

3

Esto funciona bien como está para mí en Python 2.5.2

from decimal import * 
print Decimal('1.2')+Decimal('2.3') 

les animo para especificar lo que desea utilizar en decimal

from decimal import Decimal 
print Decimal('1.2')+Decimal('2.3') 

En el otro ejemplo, usted debe utilizar

import decimal 
print decimal.Decimal('1.2')+decimal.Decimal('2.3') 
+1

Gracias por señalar mi error tipográfico. Ejecuté: import decimal 0.print decimal.Decimal ('1.2') + decimal.Decimal ('2.3') y todavía recibí el error de AttributeError: el objeto 'module' no tiene atributo 'Decimal' – jack

+1

He editado mi puesto que en un principio leer "decimal decimal.Decimal impresión de importación ('1.2') + decimal ('2.3')" a leer ahora: "importar decimal decimal.Decimal print ('1.2') + decimal. Decimal ('2.3') " – jack

Cuestiones relacionadas