我想知道应该在哪个过程中将退出脚本的控件放在哪里?如果使用函数来确定脚本是否应该继续,则应基于结果控制在调用方还是被调用方中?有没有可能出现的情况?(我确信这个问题具有更广泛的含义,因此请随时将答案扩展到编程的更高层次的实践。实际上那会很棒)我将在下面列出一些示例,作为有条件脚本退出以及如何委派控制与否的选项。想象一下,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 Falsedef 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 heredef 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 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
这取决于。
如果可行的是,应该将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个方法都不需要知道程序可能自发结束。
添加回答
举报
0/150
提交
取消