AttributeError : 'NoneType'개체에 'something'특성이없는 이유는 무엇입니까?


292

계속 오류가 발생합니다.

AttributeError: 'NoneType' object has no attribute 'something'

내가 가진 코드는 여기에 게시하기에 너무 깁니다. 일반적인 시나리오는이 원인이 무엇 AttributeError무엇입니다 NoneType뜻이며 어떻게 무슨 일이 일어나고 있는지를 좁힐 수 있습니까?


8
문제를 보여주는 가장 작은 코드를 빼십시오. 그것을 게시하십시오. print함수 (또는 버전에 따른 문장)를 추가 하여이 문제가있는 코드에서 변수가 실제로 갖는 실제 값을 표시하십시오.
S.Lott

1
'없음 유형'은 유형 = 없음을 의미합니다. 선언되지 않은 변수에 액세스하려고합니다. 우리가 당신을 도울 수 있도록 요점을 게시해야합니다.
Loïc G.

2
@ LoïcGRENON : "선언되지 않은 변수"? 파이썬에서? 그건 말이되지 않습니다. 변수를 어떻게 선언합니까?
S.Lott

2
@ LoïcGRENON-파이썬이 아닙니다. "지정 전에 참조"예외가 발생합니다. 변수는 기본적으로로 설정되지 않습니다 None.
gddc

1
@ LoïcGRENON : 당신이 말하는이 아이디어를 보여주는 코드가 있습니까?
S. 로트

답변:


287

NoneType은 작업하고 있다고 생각하는 클래스 또는 객체의 인스턴스 대신 실제로 None 합니다. 이는 일반적으로 위의 할당 또는 함수 호출이 실패했거나 예기치 않은 결과를 반환했음을 의미합니다.


111

None과 같은 변수가 있고 'something'이라는 속성에 액세스하려고합니다.

foo = None
foo.something = 1

또는

foo = None
print foo.something

둘 다 AttributeError: 'NoneType'


9
사람들이 어떻게 None무언가를 얻는 방법을 지적 할 때까지 이것은 아마도 도움이되지 않습니다. 명백한 foo = None것이 문제가되지는 않습니다. 될 것 foo = something()당신은 모르고 something()반환 할 수 있습니다 None그것은 성공하지 못한, 또는 결과 세트가 비어 있거나 어떤 때.
tripleee 2019

54

다른 사람들은 무엇을 설명했습니다 NoneType 은 정의와 함께 끝나는 일반적인 방법을 했습니다 (즉, 함수에서 값을 반환하지 못함).

None예상치 못한 다른 일반적인 이유 는 변경 가능한 객체에 대한 내부 작업 할당입니다. 예를 들면 다음과 같습니다.

mylist = mylist.sort()

sort()리스트 의 메소드는리스트를 제자리에 정렬합니다 mylist. 즉, 수정됩니다. 그러나 메소드의 실제 리턴 값은 None정렬 된 목록이 아닙니다. 에 방금 배정 None되었습니다 mylist. 다음에 시도하면 mylist.append(1)파이썬 이이 오류를 줄 것입니다.


이것은 C #에서 null 참조 예외를 얻는 것과 같은 훌륭한 설명입니다. 변수에 할당 된 값이없고 없음입니다. Thx.

17

NoneType값의 종류이다 None. 이 경우 변수 lifetime의 값은 None입니다.

이런 일이 발생하는 일반적인 방법은 a가없는 함수를 호출하는 것입니다 return.

그러나 변수를 없음으로 설정하는 다른 방법에는 무한한 방법이 있습니다.


1
나는 (사전 편집) lifetime의 가치가 있다고 생각하지 않습니다 None. 그는 다른 어떤 것의 수명 속성 에 접근하려고했다 None.
gddc

13

아래 코드를 고려하십시오.

def return_something(someint):
 if  someint > 5:
    return someint

y = return_something(2)
y.real()

이것은 당신에게 오류를 줄 것입니다

AttributeError : 'NoneType'개체에 'real'특성이 없습니다.

따라서 포인트는 다음과 같습니다.

  1. 코드에서 함수 또는 클래스 메서드가 아무것도 반환하지 않거나 None을 반환하지 않습니다
  2. 그런 다음 반환 된 객체 (없음)의 속성에 액세스하려고하면 오류 메시지가 발생합니다.

4

액세스하려는 개체를 의미합니다 None. 파이썬 NoneNull변수입니다. 이 유형의 오류는 코드에서 발생하며 다음과 같습니다.

x1 = None
print(x1.something)

#or

x1 = None
x1.someother = "Hellow world"

#or
x1 = None
x1.some_func()

# you can avoid some of these error by adding this kind of check
if(x1 is not None):
    ... Do something here
else:
    print("X1 variable is Null or None")

1

gddc는 옳지 만 매우 빈번한 예를 추가합니다.

이 함수를 재귀 형식으로 호출 할 수 있습니다. 이 경우 널 포인터 또는로 끝날 수 있습니다 NoneType. 이 경우이 오류가 발생할 수 있습니다. 따라서 해당 매개 변수의 속성에 액세스하기 전에이 아닌지 확인하십시오 NoneType.


그래,하지만 어떻게 확인하니?
not2qubit

if foo == None :
barribow

if foo is not None:
Gringo Suave

1

추정기 (sklearn)를 만들 때 fit 함수에서 자기 자신을 반환하는 것을 잊어 버린 경우에도 같은 오류가 발생합니다.

class ImputeLags(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns

    def fit(self, x, y=None):
        """ do something """

    def transfrom(self, x):
        return x

AttributeError : 'NoneType'개체에 'transform'특성이 없습니까?

추가 return self맞춤 기능은 오류를 해결합니다.


0

Flask 애플리케이션에서 HTML을 주석 처리하면이 오류가 발생할 수 있습니다. qual.date_expiry의 값은 None입니다.

   <!-- <td>{{ qual.date_expiry.date() }}</td> -->

줄을 삭제하거나 수정하십시오.

<td>{% if qual.date_attained != None %} {{ qual.date_attained.date() }} {% endif %} </td>

-1

아래와 같은 것을 할당하면 "AttributeError : 'NoneType'객체에 'show'속성이 없습니다"라는 오류가 발생합니다.

df1=df.withColumn('newAge',df['Age']).show() 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.