1

我知道终止 python 脚本的几种方法,但在这里我正在寻找一个好的和健壮的代码设计(一种推荐的方法来做到这一点)。

我的大部分代码都是用从主函数调用的函数编写的。

我想知道停止从给定函数(从 main 调用)运行 python 脚本/程序并向用户提供消息错误的最推荐方法是什么。

我当前设计的示例(如果有一些想法,请评论更好的做法):

import sys


def run_function(x):
    if x == 4:
       print 'error, x cannot be 4'
       sys.exit(0)
    else:
       print 'good x'
    return 0


def main():
    x=4
    run_function(x)
    return 0
4

3 回答 3

4

只需打印消息,然后使用sys.exit()结束程序。该argparse模块使用实用功能(调整为或多或少独立):

def exit(status=0, message=None):
    if message:
        _print_message(message, sys.stderr)
    sys.exit(status)

where_print_message()将消息写入指定的文件对象,这里sys.stderr;基本上只是使用print.

于 2013-05-11T17:17:39.293 回答
4

在您的示例中,我建议您从函数中引发错误,并且只在__main__. 该消息将使用 raise 传递。例子:

import sys

def run_function(x):
    if x == 4:
        raise ValueError('error, x cannot be 4')
    else:
        print 'good x'
    return 0

def main():
    x=4
    run_function(x)
    return 0

if __name__ == "__main__":
    try:
        main()
    except ValueError as e:
        sys.exit(e)

这样,您的函数表明它收到了错误的值,并且是调用者sys.exit根据错误决定调用 a 。

关于sys.exit的更多细节:

可选参数 arg 可以是给出退出状态的整数(默认为零),也可以是其他类型的对象。如果它是一个整数,则零被认为是“成功终止”,任何非零值都被 shell 等视为“异常终止”。大多数系统要求它在 0-127 范围内,否则会产生未定义的结果。一些系统有为特定退出代码分配特定含义的约定,但这些通常不发达;Unix 程序通常使用 2 表示命令行语法错误,使用 1 表示所有其他类型的错误。如果传递了另一种类型的对象,则 None 等效于传递零,并且任何其他对象都将打印到 stderr 并导致退出代码 1。特别是, sys.exit("some error message") 是发生错误时退出程序的快速方法。

于 2013-05-11T17:26:14.147 回答
1

首先,您可能希望在遇到错误时更改退出代码。exit(0)通常意味着进程已终止且没有错误。那你为什么要在你run_functionelse.

除此之外,我在这里看不到任何需要回答的问题。

于 2013-05-11T17:21:03.153 回答