条件脚本退出和委派控制

时间:2013-06-26 21:00:07

标签: python conditional-statements program-flow

我想知道在一个进程中应该放置对脚本的控制权吗?

如果使用函数来确定脚本是否应该继续,应该根据结果控制是否在调用者或被调用者中?

是否存在可能存在的情况?

(我确信这个问题有更广泛的含义,所以请随意将答案扩展到更高级别的编程实践。实际上这很棒)

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

想象一下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'

1 个答案:

答案 0 :(得分:1)

取决于。

如果一旦should_continue check为false就退出是可行的,那么就这样做。另一种方法是在调用链上传递“stop”返回,需要在每个级别进行检查;这很容易出错并且难以阅读。

如果只是退出并不是非常可取的,并且通常不会清理或“嘿我因为...而退出”,那么你不应该只是退出。由于您使用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之间的十五种方法都不需要知道程序可能会自发结束。