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 并重新启动了我的电脑。


所以我的问题是:

  1. 如果我在命令提示符中写入 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
  1. 如果我右键单击任何 Python 文件并使用 Open With Python,我会得到同样的错误。

注:

  1. 这一切发生在我安装 python2 之后。
  2. 所有代码都写在Python3
  3. 我的代码适用于 vscodeThonny
  4. 我的 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.