Python语句session.Process and session.Process.name()中and关键字的作用是什么
原理说明
这个现象完全是Python and运算符的短路求值规则导致的,和官方文档的描述完全一致:
and会从左到右依次判断操作数的布尔值,只要遇到假值就直接返回该假值,不会继续执行右侧的表达式- 只有所有操作数都为真值时,才会返回最后一个操作数的结果
对应测试现象解释
- 执行
session.Process and session.Process.name()时的输出逻辑:- 当
session.Process为None(假值)时,and直接返回None,不会执行右侧的.name()调用,所以不会触发报错,这就是第一组循环第一个输出为None的原因 - 当
session.Process为有效的psutil.Process对象(真值)时,and会返回右侧表达式的执行结果,也就是session.Process.name()返回的进程名字符串,所以会看到输出firefox.exe、wemeetapp.exe,这也是为什么它的输出和直接打印session.Process结果不一样的原因:真值情况下返回的是第二个操作数的结果,而非第一个
- 当
- 直接调用
session.Process.name()报错的原因:
该写法没有预先判断session.Process是否为None,当遍历到session.Process为None的项时,直接调用None不存在的name()方法,自然会抛出AttributeError。
原示例代码的设计意图
示例中 if session.Process and session.Process.name() == "chrome.exe" 是Python非常常见的防御式写法:先确认 session.Process 不为空,再执行后续的属性/方法调用,避免空指针异常。
内容的提问来源于stack exchange,提问作者23Xor
相关产品推荐
相关产品推荐

