1

我想知道脚本退出的控制应该放在进程的哪个位置?

如果一个函数用来判断一个脚本是否应该继续执行,应该根据结果控制在调用者还是被调用者?

有没有可能出现的情况?

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

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

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

1 回答 1

1

这取决于。

如果一旦 should_continue 检查为假就可以退出,那么就这样做。另一种方法是通过“停止”返回一直到需要在每个级别检查的调用链;这是容易出错且难以阅读的。

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

于 2013-06-26T21:28:05.310 回答