为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2021-03-17 13:14:11
我知道终止python脚本的几种方法,但是在这里,我正在寻找一种良好且健壮的代码设计(一种推荐的方式)。我的大部分代码都是用从主函数调用的函数编写的。我想知道最推荐的方法是停止从给定函数(从main调用)运行python脚本/程序,并向用户显示消息错误。我当前设计的示例(如果有一些想法,请评论一下更好的做法):import sysdef run_function(x):    if x == 4:       print 'error, x cannot be 4'       sys.exit(0)    else:       print 'good x'    return 0def main():    x=4    run_function(x)    return 0
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

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


def exit(status=0, message=None):

    if message:

        _print_message(message, sys.stderr)

    sys.exit(status)

其中_print_message()写入该消息到指定的文件对象,这里sys.stderr; 基本上只是使用print。


查看完整回答
反对 回复 2021-03-23
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

在您的示例中,我建议您从函数中引发错误,并且仅在中调用exit __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”)是发生错误时退出程序的快速方法。


查看完整回答
反对 回复 2021-03-23
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

首先,您可能要在遇到错误时更改退出代码。exit(0)通常表示该进程已终止且没有错误。那么,为什么run_function以后甚至都没有检查(在else分支中),又为什么要在您的中返回某些内容呢?

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


查看完整回答
反对 回复 2021-03-23
  • 3 回答
  • 0 关注
  • 351 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信