条件脚本退出和委派控制

我想知道应该在哪个过程中将退出脚本的控件放在哪里?


如果使用函数来确定脚本是否应该继续,则应基于结果控制在调用方还是被调用方中?


有没有可能出现的情况?


(我确信这个问题具有更广泛的含义,因此请随时将答案扩展到编程的更高层次的实践。实际上那会很棒)


我将在下面列出一些示例,作为有条件脚本退出以及如何委派控制与否的选项。


想象一下,should_continue正在检查提供的arg是否有效,并且脚本的继续需要其有效性。否则退出。


'''

ex 1: return state to parent process to determine if script continues

'''

def should_continue(bool):

  if bool:

    return True

  else:

    return False


def init():

  if should_continue(True):

    print 'pass'

  else:

    print 'fail'


'''

ex 2: return state only if script should continue

'''


def should_continue(bool):

  if bool:

    return True

  else:

    print 'fail'

    sys.exit() # we terminate from here


def init():

  if should_continue(True):

    print 'pass'



'''

ex 3: Don't return state. Script will continue if should_continue doesn't cause termination of script

'''


def should_continue(bool):

  if not bool:

    print 'fail'

    sys.exit()


def init():

  should_continue(True)

  print 'pass'


杨魅力
浏览 124回答 1
1回答

慕尼黑5688855

这取决于。如果可行的是,应该将should_continue检查为false退出即可。另一种方法是在呼叫链上一直传递“停止”返回,并需要在每个级别进行检查;这很容易出错,而且很难阅读。如果仅退出不是非常理想,并且通常不是万一需要清理或需要“嘿,我退出是因为...”,那么您就不应该仅仅退出。由于您以Python为例,因此它具有异常清晰的异常处理方法:class TimeToSayGoodbye(Exception):    def __init__(self, reason):        self.reason = reason具有深层嵌套的功能:def way_down_the_stack():    if not should_continue:         raise TimeToSayGoodbye('drive safely')然后如果您什么也不做,Python会生成一个有用的(但不是很漂亮)回溯。如果你的主看起来像def main():    try:        my_application()    except TimeToSayGoodbye as e:        print (e.reason)这样,您的高层就可以控制发生在任何地方的“再见”,而且my_application和way_down_the_stack之间的15个方法都不需要知道程序可能自发结束。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python