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。
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”)是发生错误时退出程序的快速方法。
TA贡献1847条经验 获得超11个赞
首先,您可能要在遇到错误时更改退出代码。exit(0)
通常表示该进程已终止且没有错误。那么,为什么run_function
以后甚至都没有检查(在else
分支中),又为什么要在您的中返回某些内容呢?
除此之外,我在这里看不到任何要回答的问题。
添加回答
举报