我想知道在一个进程中应该放置对脚本的控制权吗?
如果使用函数来确定脚本是否应该继续,应该根据结果控制是否在调用者或被调用者中?
是否存在可能存在的情况?
(我确信这个问题有更广泛的含义,所以请随意将答案扩展到更高级别的编程实践。实际上这很棒)
我将在下面列出一些示例,以考虑作为条件脚本退出的选项以及如何委派控制权。
想象一下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'
答案 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之间的十五种方法都不需要知道程序可能会自发结束。