我有python 3.4.3 如果我使用:
import platform
platform.architecture()
结果是:
('64bit', 'WindowsPE')
我有简单的程序(仅供我使用,仅供测试):
import platform
import time
import os
system_arch = []
windows = "Windows" or "windows"
linux = "Linux" or "linux"
try:
platform.system()
a = platform.system()
if a == windows:
platform.architecture()
if ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():
system_arch += [platform.system()]
system_arch += ['64-bit']
elif ("32" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():
system_arch += [platform.system()]
system_arch += ['32-bit']
else:
system_arch += ['win_test_ok']
elif a == linux:
system_arch += ['linux_test_ok']
else:
system_arch += ['system_error']
except:
TypeError, AttributeError
print(system_arch)
time.sleep(7)
结果是:
['win_test_ok']
BUT!如果我与'或'重复,我的意思是:
if ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) or ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():
和
elif ("32" in os.getenv('PROCESSOR_ARCHITECTURE')) or ("32" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():
工作正常:
['Windows', '64-bit']
我试图在任何地方找到答案但是我翻牌了...... 有任何想法..?
答案 0 :(得分:2)
你对基本的逻辑运算符有一个根本的误解。 documentation表示x or y
语句被评估为“如果x为假,则为y,否则为x”。在您的代码中的这些语句的上下文中考虑一下:
windows = "Windows" or "windows"
linux = "Linux" or "linux"
对于每一个,它将查看or
之前的字符串。由于它不是空字符串,因此评估为True
,因此"Windows" or "windows"
的评估结果为"Windows"
。因此,这两个陈述与:
windows = "Windows"
linux = "Linux"
碰巧,你很幸运,platform.system()
返回"Windows"
,你进入了外if
语句的正确分支。现在出现下一个问题:
if ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():
我不确定你认为这是如何工作的,但是"64" in os.getenv('PROCESSOR_ARCHITECTURE')
只会评估为True
(在64位环境中),因此该行将等同于:< / p>
if True in platform.architecture():
...这不会成功,因为字符串中没有True
个对象。
您的“重复”行按预期工作的原因:
if ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) or ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():
...是因为,正如我所提到的,"64" in os.getenv('PROCESSOR_ARCHITECTURE')
评估为True
。由于这使得or
之前的部分成为真,所以程序会得到满足并进入if
块而不必费心去查看后面的内容。
那么你如何解决它?
如果要判断字符串是否与多个字符串中的一个匹配,可以使用列表或元组in
:
windows = ("Windows", "windows")
...
if a in windows:
至于另一个,我不完全确定你真正要做的是什么,但删除第二个in
条款似乎做了你想要的事情:
if "64" in os.getenv('PROCESSOR_ARCHITECTURE'):