2012-01-10 99 views
0

我遇到了一些问题。出于某种原因,我试图放在一起的这个类抛出了一个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

这意味着正则表达式不匹配,所以self.hostName_regex.search(self.fqdn)返回None。当然,您不能在None上使用.group()方法。

+0

你是第一个回应,我刚刚意识到发生了什么。花点时间和facepalm。我刚刚意识到它抛出错误的原因是因为我在与正则表达式方案不匹配的服务器上运行它。啊。谢谢您的帮助! – Drahkar 2012-01-10 12:39:11

0

错误消息说您正试图访问None的属性group。从显示的代码行,这意味着self.hostName必须是None。您用于初始化self.hostName的正则表达式搜索必须无法匹配任何内容。

顺便说一句,你似乎没有完全理解错误信息。它不是“抛出一个NoneType错误”,它抛出一个AttributeError:AttributeError的错误消息显示了对象的类型,并且None的类型是NoneType

+0

和这里的文档http://docs.python.org/library/re.html#re.search – roberkules 2012-01-10 12:25:58

0
self.hostName = self.hostName_regex.search(self.fqdn) 

此行设置self.hostName到None值,当self.fqdn不是由正则表达式匹配。这是导致错误。更改相关的线类似,

self.hostNum = self.hostName and self.hostNum_regex.search(self.hostName.group()) 

只是利用其group方法之前检查self.hostName。