
python 的 `and` 运算符支持短路求值:当左侧操作数为假时,右侧表达式不会被执行,从而避免潜在异常(如对 `none` 调用方法)。
在 Python 中,布尔运算符 and 和 or 都遵循短路求值(short-circuit evaluation)规则。这意味着表达式的求值会从左到右进行,且一旦结果已确定,后续子表达式将完全跳过执行。
以你的示例为例:
if foo is not None and foo.passes_the_test():
# do something- 若 foo is not None 为 False(即 foo 是 None),整个 and 表达式已确定为 False,Python 不会执行 foo.passes_the_test();
- 因此,不会触发 AttributeError: 'NoneType' object has no attribute 'passes_the_test' 异常;
- 只有当左侧为 True 时,右侧才会被求值——这正是安全访问属性或调用方法的常用惯用法。
✅ 正确用法(推荐):
if user and user.is_active and user.has_permission('edit'):
edit_document()即使 user 为 None 或 False,后续调用均被跳过,代码健壮。
立即学习“Python免费学习笔记(深入)”;
⚠️ 注意事项:
- 短路仅适用于 and/or,不适用于位运算符 &/|(它们总是计算两边,且要求操作数为整数或支持 __and__ 等协议);
- 不要依赖短路来“隐藏”副作用——若右侧有重要逻辑(如日志、状态变更),应显式拆分为 if-elif 或使用惰性封装(如 lambda 或函数调用);
- and 返回的是最后一个被求值的操作数,而非单纯 True/False。例如:0 and 'hello' 返回 0,'a' and [] 返回 [] —— 这在条件赋值中很有用(如 name = user.name and user.name.strip() or 'Anonymous',但更推荐用 or 配合 if 表达式)。
? 总结:Python 的 and 确保左侧为真后才执行右侧,是编写安全、简洁条件逻辑的核心机制。合理利用短路,可显著提升代码可读性与鲁棒性。










