백엔드 개발자를 꿈꾸며...

[Django] TypeError: 'set' object is not reversible 오류 본문

백엔드 공부/Django

[Django] TypeError: 'set' object is not reversible 오류

박현준(-ㅅ-) 2024. 1. 16. 15:48
Exception in thread django-main-thread:
	  File "/PycharmProjects/Project/wsgi.py", line 16, in <module>
    	application = get_wsgi_application()
	  File "/opt/anaconda3/lib/python3.9/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
	    return WSGIHandler()
	  File "/opt/anaconda3/lib/python3.9/site-packages/django/core/handlers/wsgi.py", line 125, in __init__
    	self.load_middleware()
	  File "/opt/anaconda3/lib/python3.9/site-packages/django/core/handlers/base.py", line 39, in load_middleware
    	for middleware_path in reversed(settings.MIDDLEWARE):

	TypeError: 'set' object is not reversible

 

이어서 장고 프로젝트를 하려고 파이참을 실행 후 런서버를 돌려보니

갑자기 에러가 떴습니다... 당황스러웠습니다. 3일전까지만 해도 오류가 났던 부분들을 모두 수정된 상태였는데 갑자기?!

 

어떤 이유인지는 몰라도 우선 에러가 난 곳은 settings.py에서 middleware부분 같아서 살펴보다가 아래처럼 되어있었습니다.

MIDDLEWARE = {
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",

    'allauth.account.middleware.AccountMiddleware',
}

 

처음에는 어디가 잘못된 지 몰라서 찾아보다가 결국은 괄호문제였습니다. 

파이썬에서 { } 중괄호는 집합, [ ] 대괄호는 리스트를 뜻합니다.

그러한데 미들웨어 정의들 뿐 아니라 모두 리스트형식의 [ ] 대괄호로 요소들이 목록으로 나열 되어있는데

애초에 정의해야하는 형식에 안 맞은 괄호가 되어있어서 오류가 났습니다.

 

그래서 지금에서야 오류에서 set이 뜻하는 걸 { } 라고 다시 보이네요... 

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",

    'allauth.account.middleware.AccountMiddleware',
]

아무튼 [ ] 대괄호 형식으로 다시 써주니 서버는 잘 돌아갔습니다. 

 

근데 정말 왜 바꼈을까요... 제 실수겠죠?

 

감사합니다.

Comments