Python3/Flask

[Flask] ReferenceError: weakly-referenced object no longer exists 의 발생이유

Razelo 2021. 11. 25. 23:29

며칠전 포스팅했던 글에 이어서 정확한 설명을 찾았다. 

 

https://www.py4u.net/discuss/147695 

위의 링크에 달린 답변들이 많은 도움이 되었다. 

 

weakly-referenced object 는 가비지 콜렉터가 제거할 대상들을 살피는 와중에서 그것이 제거되지 않을 것이라고 보장해주지 못할 경우에 놓인 객체를 말한다고 한다. 그러니 내가 쓰려고 하는 대상이 가비지 콜렉터에게 제거당할 가능성이 존재한다는 거다. 그렇기 때문에 에러가 발생한다. 

 

나의 경우도 함수가 종료하면 당연히 local variable 들은 사라질텐데 그 점을 염두에 두지 못하고 코드를 작성한 탓에 이런 에러가 발생했던 거다. (나는 함수의 local variable에 mysql dbconnect 관련 객체를 받아서 그걸 또 리턴받아서 사용하려고 했었다. )

 

관련된 내용은 아래에서 좀 더 깊게 살펴볼 수 있을 것 같다. 

https://docs.python.org/3/library/weakref.html#module-weakref

 

문득 이와는 관련이 없는 것같지만 파이썬이라서 발생하는 에러이지 않을까 하는 생각이 든다 100프로 그렇다라고 확신되는 것은 아니지만 존재하는 모든 것을 객체로 표현하고 사용하며 객체 참조에 의한 호출(call by object reference)이기 때문에 이러지 않을까 싶다. 

 

어쩌면 모든 것을 객체로 취급하겠다는 철학이 발목을 잡진 않을까? 객체로 취급하는건 굳이 스스로의 내부사항이 아니라 그저 관점의 영역에서만 보았다면 더 좋지 않았을까? 

반응형