实例变量中的NoneType错误

0 投票
3 回答
567 浏览
提问于 2025-04-17 09:55

我遇到了一点问题。出于某种原因,我正在尝试创建的这个类出现了一个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() 方法。

撰写回答