基本上我有一个python文件,如:
python-code.py
Run Code Online (Sandbox Code Playgroud)
并使用:
import (python-code)
Run Code Online (Sandbox Code Playgroud)
解释器给我语法错误.
关于如何修复它的任何想法?破折号是否在python文件名中是非法的?
Pao*_*ino 147
你应该看看PEP 8,Python代码风格指南:
包和模块名称模块应具有简短的全小写名称.如果提高可读性,则可以在模块名称中使用下划线.Python包也应该有简短的全小写名称,但不鼓励使用下划线.
由于模块名称映射到文件名,并且某些文件系统不区分大小写并截断长名称,因此选择模块名称相当短很重要 - 这在Unix上不是问题,但它可能是将代码传输到较旧的Mac或Windows版本或DOS时出现问题.
换句话说:重命名你的文件:)
Ric*_*and 113
您的代码中需要注意的另一件事是导入不是函数.所以import(python-code)应该是import python-code,正如一些人已经提到的,被解释为"导入python减去代码",而不是你想要的.如果您确实需要在其名称中导入带破折号的文件,则可以执行以下操作::
python_code = __import__('python-code')
Run Code Online (Sandbox Code Playgroud)
但是,如上所述,这并不是真的值得推荐的.如果是您控制的内容,则应更改文件名.
nde*_*mou 45
TLDR
破折号不是非法的,但您不应使用它们有以下三个原因:
如果您确实需要使用短划线导入文件名,则特殊语法如下:
module_name = __import__('module-name')
Run Code Online (Sandbox Code Playgroud)
想知道为什么我们需要特殊的语法?
特殊语法的原因是,当您编写时,import somename您正在创建一个带有标识符的模块对象somename(因此您以后可以使用它somename.funcname).当然module-name不是有效的标识符,因此是提供有效标识符的特殊语法.
你不明白为什么module-name不是有效的标识符?
别担心 - 我也没有.这里有一个提示可以帮到你:看看这条蟒蛇线:x=var1-var2.你看到作业右侧的减法或带破折号的变量名吗?
PS
我的答案中没有任何原创内容,除了包括我认为是一个地方所有其他答案中最相关的信息
Sin*_*ion 28
问题是它python-code不是标识符.解析器将此视为python减号code.当然,这不符合您的要求.您将需要使用也是有效python标识符的文件名.尝试用-下划线替换.
在 Python 3 上使用import_module:
from importlib import import_module
python_code = import_module('python-code')
Run Code Online (Sandbox Code Playgroud)
更普遍,
import_module('package.subpackage.module')
Run Code Online (Sandbox Code Playgroud)
您可能可以通过一些__import__hack导入它,但如果您还不知道如何导入,则不应该这样做。Python 模块名称应该是有效的变量名称(“标识符”)——这意味着如果你有一个模块foo_bar,你可以在 Python ( print foo_bar) 中使用它。您将无法使用奇怪的名称(print foo-bar-> 语法错误)这样做。