猿问

代码设计和错误处理:退出程序并在python中出现错误

我知道终止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


繁花不似锦
浏览 352回答 3
3回答

缥缈止盈

只需打印消息,然后使用sys.exit()结束程序。该argparse模块使用实用程序功能(或多或少地被调整为独立的):def exit(status=0, message=None):    if message:        _print_message(message, sys.stderr)    sys.exit(status)其中_print_message()写入该消息到指定的文件对象,这里sys.stderr; 基本上只是使用print。

幕布斯7119047

在您的示例中,我建议您从函数中引发错误,并且仅在中调用exit __main__。该消息将使用raise传递。例子:import sysdef run_function(x):    if x == 4:        raise ValueError('error, x cannot be 4')    else:        print 'good x'    return 0def main():    x=4    run_function(x)    return 0if __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”)是发生错误时退出程序的快速方法。

回首忆惘然

首先,您可能要在遇到错误时更改退出代码。exit(0)通常表示该进程已终止且没有错误。那么,为什么run_function以后甚至都没有检查(在else分支中),又为什么要在您的中返回某些内容呢?除此之外,我在这里看不到任何要回答的问题。
随时随地看视频慕课网APP

相关分类

Python
我要回答