我是在python中创建类的新手。 但我在版本2.7上有一个奇怪的行为。 5 。 2.7.8或2.7.1或3没有问题,只有2.7。 5
尝试使用我的课程时出现此错误
# ./script_testing.py
Linux
('CentOS Linux', '7.1.1503', 'Core')
Traceback (most recent call last):
File "./script_testing.py", line 1204, in <module>
print(x.DIST)
AttributeError: WhatsName instance has no attribute 'DIST'
我的代码:
import platform
class WhatsName():
"""Distributive version checking and soft installing"""
def __init__(self):
self.PLAT=platform.system()
self.DISTRIB=platform.linux_distribution()
if self.PLAT=='Linux' or self.PLAT=='Linux2':
if self.DISTRIB[0]=='debian':
self.DIST='Debian'
elif self.DISTRIB[0]=='Ubuntu':
self.DIST='Ubuntu'
elif self.DISTRIB[0]=='CentOS':
self.DIST='Centos'
elif self.DISTRIB[0]=='Fedora':
self.DIST='Fedora'
elif 'SUSE' in self.DISTRIB[0]:
self.DIST='Suse'
elif self.DISTRIB[0]=='Slackware':
self.DIST='Slackware'
else:
pass
elif self.PLAT=='FreeBSD':
self.DIST='FreeBSD'
elif PLAT=='Windows':
self.DIST='Windows'
elif PLAT=='Darwin':
self.DIST='MacOS'
else:
self.DIST='Unknown'
def CheckSystem(self):
pass
def InstallSoft(self,x,y):
pass
x=WhatsName()
print(x.PLAT)
print(x.DISTRIB)
print(x.DIST) <== This string generates the error
所以,我不明白为什么DIST不是WhatsName类的属性。 为什么它只在版本2.7.5上发生
在其他版本中我得到正常结果:
"script_testing.py" 1233L, 26872C записано
:!python2.7 script_testing.py
Linux
('debian', '7.1', '')
Debian
答案 0 :(得分:0)
您的if
个语句都不匹配self.DISTRIB
的第一个值:
('CentOS Linux', '7.1.1503', 'Core')
字符串为'CentOS Linux'
,但您不测试该字符串,因此永远不会设置self.DIST
。
您只测试字符串'CentOS'
:
elif self.DISTRIB[0]=='CentOS':
self.DIST='Centos'
此行永远不匹配,此if...elif...
语句中的其他测试也不匹配。由于此处没有else
来设置self.DIST
,因此最后会出现属性错误。
您可以修复该行:
elif self.DISTRIB[0]=='CentOS Linux':
self.DIST='Centos'
我还会在开始时设置self.DIST = 'Unknown'
,因此您有一个默认值,然后让您的if
分支集确定更精确的值。