2012-01-10 8 views
0

私は少し問題があります。何らかの理由で、私がまとめようとしているこのクラスは、すべての目的と目的のために、私が理解できる限り適切に応答しなければならないとき、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()) 

私はのエラーでself.hostName.group()への呼び出しのプログラムが失敗したprogEnvクラスをインスタンス化する場合:何が起こっているかの

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

あなたは最初に応答しました。私はちょうど起こっていたことを正確に理解しました。時間とフェイスパルムを取る時間。私はちょうど私が正規表現スキームと一致しないサーバーでそれを実行しているため、エラーをスローしている理由が分かった。ああ。助けてくれてありがとう! – Drahkar

0

groupNoneにアクセスしようとしているというエラーメッセージが表示されます。表示されるコード行から、self.hostNameNoneでなければなりません。 self.hostNameの初期化に使用した正規表現検索では、何も一致していない必要があります。

ところで、あなたは完全にエラーメッセージを理解していないようです。それは "NoneTypeエラーを投げる"ではない、それはAttributeErrorを投げています:AttributeErrorのエラーメッセージはあなたにオブジェクトのタイプを示し、NoneのタイプはNoneTypeです。 self.fqdnが正規表現にマッチしていないとき

+0

ここにdocs http://docs.python.org/library/re.html#re.search – roberkules

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

この行は、Noneにself.hostNameの値を設定します。どちらがエラーの原因です。ちょうどそのgroupメソッドを使用する前に、self.hostNameをチェックする

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

、のようなものに依存行を変更します。

関連する問題