实例变量中的NoneType错误
我遇到了一点问题。出于某种原因,我正在尝试创建的这个类出现了一个NoneType错误,而从我能看出来的情况来看,它应该是正常工作的。
import re
import subprocess
class progEnv( object ) :
hostName_regex = re.compile( '[a-z][a-z]prog[a-z][a-z][a-z]\d\d' )
hostDomain_regex = re.compile( '(prod|dev|qa1|stag)\.company\.net' )
hostNum_regex = re.compile( '[a-z][a-z]prog[a-z][a-z][a-z](\d\d)' )
hostPrefix_regex = re.compile( '\w\wprog' )
hostTier_regex = re.compile( '(web|app)' )
hostId_regex = re.compile( '[a-z][a-z]prog[a-z][a-z][a-z]\d\d([a-z])' )
hostEnv_regex = re.compile( '(prod|dev|qa1|stag)' )
def __init__( self ) :
self.hostnameProc = subprocess.Popen( 'hostname', stdout=subprocess.PIPE )
self.fqdn = self.hostnameProc.stdout.read()
self.hostName = self.hostName_regex.search( self.fqdn )
self.hostDomain = self.hostDomain_regex.search( self.fqdn )
self.hostNum = self.hostNum_regex.search( self.hostName.group() )
self.hostPrefix = self.hostPrefix_regex.search( self.hostName.group() )
self.hostTier = self.hostTier_regex.search( self.hostName.group() )
self.hostId = self.hostId_regex.search( self.hostName.group() )
self.hostEnv = self.hostEnv_regex.search( self.hostName.group() )
当我创建progEnv类的实例时,程序在调用self.hostName.group()
时失败,出现了以下错误:
Traceback (most recent call last):
File "./test.py", line 5, in <module>
env = prog_env.progEnv()
File "/prog/eclipse/workspace/PROG Management Command/prog_env.py", line 28, in __init__
self.hostNum = self.hostNum_regex.search( self.hostName.group() )
AttributeError: 'NoneType' object has no attribute 'group'
你们觉得这是什么情况呢?
3 个回答
0
错误信息告诉你,你正在尝试访问一个叫做 group
的属性,但这个属性的值是 None
。从显示的代码行来看,这意味着 self.hostName
的值一定是 None
。你用来初始化 self.hostName
的正则表达式搜索没有找到任何匹配的内容。
顺便说一下,你似乎对错误信息的理解不够全面。它并不是在“抛出一个 NoneType 错误”,而是抛出了一个 AttributeError
:这个错误信息会告诉你对象的类型,而 None
的类型是 NoneType
。
0
self.hostName = self.hostName_regex.search( self.fqdn )
这一行代码的意思是,当 self.fqdn
没有通过正则表达式匹配时,self.hostName
的值会被设置为 None
。这就是导致错误的原因。你可以把相关的代码改成下面这样,
self.hostNum = self.hostName and self.hostNum_regex.search( self.hostName.group() )
在使用 group
方法之前,先检查一下 self.hostName
的值。
3
这句话的意思是,正则表达式没有找到匹配的内容,所以 self.hostName_regex.search(self.fqdn)
返回了 None
。当然,你不能在 None
上使用 .group()
方法。