Guardian模式疑问:为何‘无输入’的长度判断会大于0?
关于Guardian模式与空字符串长度的疑问解答
先看你给出的Python 2代码:
while True: line = input('> ') if len(line) > 0 and line[0] == '#' : continue if line == 'done': break print line print ("done!")
首先明确:空字符串的长度是0,不可能大于0。你代码里的len(line) > 0就是Guardian(守卫)条件,核心作用是避免后续访问line[0]时触发索引越界错误。
Python的逻辑与and是短路求值的:如果第一个条件len(line) > 0不成立(也就是输入为空字符串),第二个条件line[0] == '#'根本不会执行。这正是Guardian模式的意义——先用安全条件把门守住,防止代码去访问不存在的字符串索引。
你之所以有这个疑问,可能是误以为“无输入”时字符串长度大于0,但实际直接按回车输入空内容时,line就是空字符串'',此时len(line)等于0,第一个条件不满足,整个if语句直接跳过,不会触发任何错误。
再拆解这段代码的执行逻辑:
- 循环读取用户输入的一行内容
- 若输入非空且首字符是
#,跳过当前循环(不执行后续打印) - 若输入是
done,直接退出循环 - 其他情况打印输入内容
- 循环结束后输出
done!
内容的提问来源于stack exchange,提问作者Ari
相关产品推荐
相关产品推荐

