2009-04-17 7 views

Respuesta

114

Debe retirar PEP 8, la Guía de Estilo para el código Python:

de paquetes y módulos nombres de los módulos deben tener, los nombres de todos los cortos-minúsculas. Los subrayados se pueden utilizar en el nombre del módulo si mejora la legibilidad. Los paquetes de Python también deben tener nombres cortos en minúsculas, aunque se desaconseja el uso de guiones bajos.

Dado que los nombres de los módulos se asignan a nombres de archivo y algunos sistemas de archivos no distinguen entre mayúsculas y minúsculas, es importante que los nombres de los módulos sean bastante cortos; esto no será un problema en Unix, pero puede ser un problema cuando el código se transporta a versiones anteriores de Mac o Windows, o DOS.

En otras palabras: cambiar el nombre del archivo :)

+42

el problema no tiene nada que ver con el estilo, es un _syntax_ _error_ – hop

+1

Como se muestra a continuación, es posible tener un archivo con este nombre, por lo que la guía de estilo es muy relevante. –

+3

Puede ser muy útil usar guiones en el directorio Python y nombres de archivo cuando explícitamente desea evitar importaciones. Por ejemplo, en (digamos) un proyecto de Django, puede tener scripts escritos en Python que no deberían ser direccionables como aplicaciones. Puede ponerlos en una carpeta como 'ops-scripts' y saber que no se pueden importar utilizando un enfoque de espacio de nombres de paquete normal. O un solo script podría llamarse 'stop-website.py' para un efecto similar. Cualquiera de estos aún podría importarse a través de 'runpy' y algunos otros métodos, por supuesto, pero esto ayuda a evitar algunos errores comunes. –

23

El problema es que python-code no es un identificador. El analizador ve esto como python menos code. Por supuesto, esto no hará lo que estás preguntando. Tendrá que usar un nombre de archivo que también sea un identificador python válido. Intente reemplazar el - con un guión bajo.

+1

1. Nunca pensé que el nombre de archivo del código fuente de Python debería ser un identificador válido, porque ** el nombre del archivo ** se usará para referirse al objeto del módulo. – andy

3

que probablemente se podría importar a través de algún __import__ corte, pero si no lo sabe ya cómo, usted no debe. Los nombres de los módulos de Python deben ser nombres de variables válidos ("identificadores"), es decir, si tiene un módulo foo_bar, puede usarlo desde dentro de Python (print foo_bar). No podría hacerlo con un nombre extraño (print foo-bar -> error de sintaxis).

91

Otra cosa a tener en cuenta en su código es que la importación no es una función. Por lo tanto, import(python-code) debe ser import python-code que, como algunos ya han mencionado, se interpreta como "importar código Python minus", no es lo que pretendía. Si realmente necesita para importar un archivo con un guión en su nombre, puede hacer lo siguiente ::

python_code = __import__('python-code') 

Pero, como también se ha mencionado anteriormente, esto no es muy recomendable. Deberías cambiar el nombre del archivo si es algo que controlas.

+0

http://docs.python.org/2/library/importlib.html –

15

tldr

Los guiones son no ilegal, pero que no deben usarlos por 3 razones:

  1. lo que necesita una sintaxis especial para importar archivos con guiones
  2. Nadie espera que un nombre de módulo con un guión
  3. Va en contra de las recomendaciones del Python Style Guide

Si usted definitivamente necesidad de importar un nombre de archivo con una pizca de la sintaxis especial es la siguiente:

module_name = __import__('module-name') 

curioso acerca de por qué necesitamos una sintaxis especial?

La razón de la sintaxis especial es que cuando se escribe import somename va a crear un objeto de módulo con identificador somename (por lo que más adelante se puede utilizar con, por ejemplo somename.funcname). Por supuesto, module-name no es un identificador válido y, por lo tanto, la sintaxis especial que otorga una válida.

¿No entiendes por qué el nombre del módulo no es un identificador válido?

No se preocupe, yo tampoco. Aquí hay un consejo para ayudarte: Mira esta línea de Python: x=var1-var2. ¿Ves una resta en el lado derecho de la tarea o un nombre de variable con un guión?

PS

originales Nada en mi respuesta, excepto incluyendo lo que yo consideraba como los bits de información más relevantes de todas las otras respuestas en un solo lugar

Cuestiones relacionadas