【问题标题】:How to properly finish a python 3 script如何正确完成 python 3 脚本
【发布时间】:2019-11-21 13:34:33
【问题描述】:

在 C++ 中,main() 函数被标准化为 int 类型,因此应该 return(0) 成功执行。此外,程序通常会在末尾打印一个换行符以刷新stdout,如下所示:

最小、完整、可验证的示例

hello_world.cpp

#include <iostream>
int main() {
    std::cout << "hello, world" << std::endl;

    printf("\n");
    return(0);
}

你好,世界

是否有正确退出 Python 脚本的等效方法?是否也打印换行符,然后使用代码 0 显式退出?

hello_world.py

import sys
print("hello, world")

print('\n')
sys.exit(0)

你好,世界

Tyvm :^)

【问题讨论】:

  • 刷新将(通常)作为解构内容的一部分自动发生 - 如果您没有明确 sys.exit(0),您是否尝试过 python 程序返回的返回码?为什么要问您是否可以尝试一下?
  • 根据我的经验(个人和我看到其他人所做的),您只需让 python 代码自行结束(没有exit 声明)。不过,您可能应该使用if __name__ == '__main__' 语句。 Python 不要求(也不在 PEP 中指定)以特殊行结束程序,例如 exit。另外作为记录,默认情况下print 在末尾放置一个\n,因此您无需再次打印。
  • 打印一个空行“以防万一”是一种麻烦,不是一个好习惯。
  • 另外prints 不要在 python 中使用flush,除非通过flush=True 明确告知。只是另一个仅供参考。
  • 我不确定这是否适合您的问题范围,但至于 优雅退出,Python 中一个非常常见的构造是 try/except,它可以帮助您处理错误并终止您的程序。更好的是,使用 with 语句包装上下文管理器,以确保程序在该块中出现错误时正常退出

标签: python python-3.x return exit


【解决方案1】:

当没有更多代码可以运行时,python 脚本结束。教科书hello world程序就一行:

print("hello, world!")

Python 的 print() 函数等同于其他语言的 println() 函数,因为它默认打印换行符。您可以使用可选的 end 关键字参数更改此行为:

print("Hello", end=" ")
print("World!")

如果你只是想打印一个额外的行,你甚至不必去指定它的额外麻烦 - 你可以不带参数调用print(),它会打印一个空白行。

您将看到的大多数 python 脚本还具有这样的功能:

if __name__ == "__main__":
    print("hello, world!")

这本质上是一个过滤器,以确保当前代码作为脚本运行,并且它不只是由其他文件导入(__name__ 是内置的表示导入模块的名称的变量,或者 "__main__" 如果它是直接从命令行运行的,因此不是从任何地方导入的)。

默认情况下,python 脚本会以代码0 退出。如果您想使用不同的返回码退出(例如,如果您的脚本遇到错误,则可以使用内置的exit()(或sys.exit(),如果您想更安全一点 - 请参阅下面@cdarke 的出色评论)并且您想优雅地退出)。否则,标准做法是让脚本自行结束。

【讨论】:

  • 那么...如何正确完成 Python 脚本?请注意,我有意避免使用 terminateexit 等词。
  • @kmiklas: 有一个空行
  • @kmiklas PEP 声明文件末尾应该有一个空行。该行不是必需的,但这是常见的格式。 Python 不需要任何花哨的东西来说“我现在已经完成了我的代码”,只需停止输入 :)
  • 您可以使用内置的 exit() 函数 - 不。似乎有一个名为exit 的内置函数与sys.exit 具有相同的行为,但外观可能具有欺骗性。 exit 不是内置函数,而是一个 site.Quitter 可调用对象,它会引发 SystemExit 异常。站点模块通常在启动时自动加载,但可以使用-S 命令行选项抑制,在这种情况下exit 将不起作用。
  • 另见docs.python.org/3/library/constants.html#exit,特别是“它们对交互式解释器外壳很有用,不应在程序中使用。
猜你喜欢
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2014-05-06
相关资源
最近更新 更多