Traceback (most recent call last): File "E:\Music\music_player.py - Shortcut.lnk", line 1, in <module> NameError: name 'L' is not defined
Traceback (most recent call last): File "E:\Music\music_player.py - Shortcut.lnk", line 1, in <module> NameError: name 'L' is not defined
当我在 windows 命令提示符中写入 python music_player.py
时,文件 运行s 成功。
但是 当我用 music_player.py
快捷方式文件 python "music_player.py - Shortcut.lnk"
尝试相同时,它给我这个错误:
Traceback (most recent call last):
File "E:\Music\music_player.py - Shortcut.lnk", line 1, in <module>
NameError: name 'L' is not defined
此外,如果我尝试使用 Python 打开 .py
文件,那么它会显示相同的错误。
但现在我卸载了 Python2 并重新启动了我的电脑。
所以我的问题是:
- 如果我在命令提示符中写入
python music_player.py
,它将 运行 成功,但是如果我尝试对 music_player.py
快捷方式文件进行相同的操作,它会显示此错误
Traceback (most recent call last):
File "E:\Music\music_player.py - Shortcut.lnk", line 1, in <module>
NameError: name 'L' is not defined
- 如果我右键单击任何 Python 文件并使用
Open With Python
,我会得到同样的错误。
注:
- 这一切发生在我安装 python2 之后。
- 所有代码都写在Python3
- 我的代码适用于
vscode
和 Thonny
。
- 我的 Github Repository(代码行太多)上提供了所有代码。
尽管每当您双击 运行 该快捷方式时,它会将您重定向到原始 Python 文件,该快捷方式文件 本身不是一个模块。
在windows 命令提示符下,您可以使用type
命令来显示文本文件的内容。 (虽然它不是可读的文本文件)
如你所见,当你双击它时,它有必要的信息来重定向你。然后 OS 将由指定的应用程序执行引用的文件,在您的情况下是 python.exe
。
但 Python 不能将其视为常规 Python 模块。它将检查 type
命令显示的那个文件的内容。
当您键入 python something
时,无论文件扩展名是什么,解释器都会读取内容,编译内容以创建 pyc
文件,然后解释 pyc
文件。
如果你使用 -m
选项,Python 可以执行原始源文件,但 之后 它会给你相同的 error.As @martjin 说 here:
When you use the -m command-line flag, Python will import a module or
package for you, then run it as a script. When you don't use the -m
flag, the file you named is run as just a script.
因此在导入过程中 Python 以某种方式解析源文件的路径并导入文件。这是文件正在执行的时间(模块在导入时执行)。之后它将在 运行 实际快捷方式文件的内容上失败。
一种解决方案是这样执行:
python -c "import os;os.startfile('p_file.py - Shortcut.lnk')"
所以你基本上是在调用 os.startfile:
When operation is not
specified or 'open', this acts like double-clicking the file in
Windows Explorer, or giving the file name as an argument to the start
command from the interactive command shell: the file is opened with
whatever application (if any) its extension is associated.
当我在 windows 命令提示符中写入 python music_player.py
时,文件 运行s 成功。
但是 当我用 music_player.py
快捷方式文件 python "music_player.py - Shortcut.lnk"
尝试相同时,它给我这个错误:
Traceback (most recent call last):
File "E:\Music\music_player.py - Shortcut.lnk", line 1, in <module>
NameError: name 'L' is not defined
此外,如果我尝试使用 Python 打开 .py
文件,那么它会显示相同的错误。
但现在我卸载了 Python2 并重新启动了我的电脑。
所以我的问题是:
- 如果我在命令提示符中写入
python music_player.py
,它将 运行 成功,但是如果我尝试对music_player.py
快捷方式文件进行相同的操作,它会显示此错误
Traceback (most recent call last):
File "E:\Music\music_player.py - Shortcut.lnk", line 1, in <module>
NameError: name 'L' is not defined
- 如果我右键单击任何 Python 文件并使用
Open With Python
,我会得到同样的错误。
注:
- 这一切发生在我安装 python2 之后。
- 所有代码都写在Python3
- 我的代码适用于
vscode
和Thonny
。 - 我的 Github Repository(代码行太多)上提供了所有代码。
尽管每当您双击 运行 该快捷方式时,它会将您重定向到原始 Python 文件,该快捷方式文件 本身不是一个模块。
在windows 命令提示符下,您可以使用type
命令来显示文本文件的内容。 (虽然它不是可读的文本文件)
如你所见,当你双击它时,它有必要的信息来重定向你。然后 OS 将由指定的应用程序执行引用的文件,在您的情况下是 python.exe
。
但 Python 不能将其视为常规 Python 模块。它将检查 type
命令显示的那个文件的内容。
当您键入 python something
时,无论文件扩展名是什么,解释器都会读取内容,编译内容以创建 pyc
文件,然后解释 pyc
文件。
如果你使用 -m
选项,Python 可以执行原始源文件,但 之后 它会给你相同的 error.As @martjin 说 here:
When you use the -m command-line flag, Python will import a module or package for you, then run it as a script. When you don't use the -m flag, the file you named is run as just a script.
因此在导入过程中 Python 以某种方式解析源文件的路径并导入文件。这是文件正在执行的时间(模块在导入时执行)。之后它将在 运行 实际快捷方式文件的内容上失败。
一种解决方案是这样执行:
python -c "import os;os.startfile('p_file.py - Shortcut.lnk')"
所以你基本上是在调用 os.startfile:
When operation is not specified or 'open', this acts like double-clicking the file in Windows Explorer, or giving the file name as an argument to the start command from the interactive command shell: the file is opened with whatever application (if any) its extension is associated.