【问题标题】:Why doesn't the main() function run when I start a Python script? Where does the script start running?为什么我启动 Python 脚本时 main() 函数不运行?脚本从哪里开始运行?
【发布时间】:2022-10-02 02:13:40
【问题描述】:

我有这个代码:

import sys
def random(size=16):
    return open(r\"C:\\Users\\ravishankarv\\Documents\\Python\\key.txt\").read(size)
def main():
    key = random(13)
    print(key)

当我尝试运行脚本时,没有错误,但似乎没有发生任何事情。我希望它从密钥文件中打印一些内容,但没有打印任何内容。

怎么了?如何使代码运行?

  • 这个版本的问题似乎更受欢迎并且得到了更好的答案,所以我扭转了重复关闭的方向并稍微修复了这个问题。

标签: python program-entry-point


【解决方案1】:

您根本没有调用您的 main 函数,因此 Python 解释器不会为您调用它。

将此添加为最后一行,以便始终调用它:

main()

如果使用常见的:

if __name__ == "__main__":
    main()

它将确保仅当该模块作为 Python 解释的起始代码执行时才调用您的 main 方法,有关此内容的更多信息将在此处讨论:What does if __name__ == "__main__": do?

如果你想知道如何编写最好的“main”函数,Guido van Rossum (the creator of Python) wrote about it here.

【讨论】:

  • 乐高,好像还是不行。我在代码末尾包含了 main() 。但似乎什么也没有发生。原始帖子中的代码没有打印任何内容。
【解决方案2】:

Python 不像其他语言,它会自动调用main() 函数。您所做的只是定义了您的功能。

您必须手动调用您的主要功能:

main()

此外,您通常会在某些代码中看到这一点:

if __name__ == '__main__':
    main()

【讨论】:

  • 为什么要投反对票?
  • 可能人们不喜欢第二个代码示例没有适当的解释。因为它也可能是魔术代码。请注意,这里也没有其他人做过,但 LegoStormtroopr 的回复中有一个有用的链接。
  • @AndrewS 三年后 - 我同意你的观点,但我怀疑它是否有理由投反对票:P。
【解决方案3】:

python中没有这样的main方法,你要做的是:

if __name__ == '__main__':
    main()

【讨论】:

    【解决方案4】:

    您正在定义一个函数,但从不调用它。因此,您没有收到任何错误,但没有任何反应。添加此添加结束,它将起作用:

    if __name__ == "__main__":
        main()
    

    【讨论】:

      【解决方案5】:

      确实发生了一些事情,只是不明显

      Python 从上到下运行脚本。 def 是一个语句,遇到它就会执行,就像任何其他语句一样。但是,这样做的效果是创造函数(并为其命名),不叫它.同样,import 是加载另一个模块的语句(并使它的代码从上到下运行,具有自己的全局变量上下文),并为其分配一个名称。

      因此,当示例代码运行时,会发生三件事:

      • sys标准库模块的代码运行,然后我们自己模块的全局变量中的名称sys绑定到那个模块

      • random 的代码创建一个函数,然后将名称random 绑定到该函数

      • main 的代码创建一个函数,然后将名称main 绑定到该函数

      没有什么可以调用这些函数,所以它们不会被调用。由于没有调用它们,因此它们内部的代码不会运行 - 它仅用于创建函数。由于该代码没有运行,因此不会读取该文件,并且没有任何内容是 printed。

      没有“特殊”功能名称

      与其他一些语言不同,Python不在意一个函数被命名为main,或者其他任何东西。它不会自动运行。

      正如 Python 之禅所说,“显式胜于隐式”。如果我们想要调用一个函数,我们必须调用它。唯一自动运行的是顶层的东西,因为那些是我们明确给出的指令。

      脚本从顶部开始

      在许多现实世界的脚本中,您可能会看到一行写着if __name__ == '__main__':。这是不是“脚本开始的地方”。该脚本从上到下运行。

      请阅读 What does if __name__ == "__main__": do? 以了解此类 if 语句的目的(简短版本:如果其他人 imports 将此文件作为模块,它确保您的部分顶级代码被跳过)。这是不是强制性的,它确实不是有任何特殊的“信号”目的来说明代码开始运行的位置。这是只是一个完全正常的if 语句,它正在检查一个稍微不寻常的情况。没有什么要求您在脚本中使用它(除了想要检查它检查的内容),也没有什么可以阻止您多次使用它。没有什么可以阻止您检查 __name__ 是否等于其他值(它只是......几乎肯定没用)。

      【讨论】:

        【解决方案6】:

        您没有调用该函数。将main() 放在代码的底部。

        【讨论】:

          猜你喜欢
          • 2013-03-05
          • 2015-01-16
          • 2013-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多