python flask admin RuntimeError: maximum recursion depth exceeded 발생할 때
조회수 491회
@babel.localeselector
def get_locale():
print 'check2'
if 'lang' in session:
cur_lang = session['lang']
if cur_lang in app.config['SUPPORTED_LANGUAGES'].keys():
return cur_lang
else:
return request.accept_languages.best_match(app.config['SUPPORTED_LANGUAGES'].keys())
else:
best_lang = request.accept_languages.best_match(app.config['SUPPORTED_LANGUAGES'].keys())
session['lang'] = best_lang
return request.accept_languages.best_match(app.config['SUPPORTED_LANGUAGES'].keys())
기본적으로 flask 로 웹페이지 구현해둔 것에 babel을 사용하고 있습니다. 그런데 admin 경로로 이동만하면 위에 있는 함수가 무한 반복 실행 되더군요. check2가 계속 찍히다가 RuntimeError: maximum recursion depth exceeded 에러가 발생합니다. 일반 경로에서는 페이지 이동할 때 한 번만 실행 되는 함수인데 왜 admin페이지로 가면 저 함수만 무한으로 찍힐까요?
그리고 @babel.localeselector이것은 어디서 호출 되는 뭘 의미하는 명령어인가요?
1 답변
-
하기의 사이트에서 문서를 읽어보시면 @babel.localeselector 상세한 설명을 볼 수 있습니다.
간단히 설명하면 babel 은 국제화 처리를 위해 사용합니다.
@babel.localeselector
데코레이터를 사용했으면 en, ko 같은 locale 정보를 리턴하면 됩니다.check2 여러번 찍힌다는 것은 그 함수가 잘못된 것이 아니라 get_locale 를 여러번 호출하고 있다는 것이겠죠.
pdb 를 이용해서
print 'check2'
라인에 브레이크 포인터를 설정하고 멈추었을때 call stack 을 확인하면 caller 을 알 수 있습니다.pycharm 같은 ide를 사용할 수 있다면 더 쉽게 파악할 수 있습니다.
- pdb test 코드
abcd.py
import pdb def add(a, b): breakpoint() # python 3.7 이하버전인 경우 pdb.set_trace() 로 해야함 return a + b def main(): return add(3, 4) if __name__ == '__main__': print(main())
- pdb 로 call stack 보기 위에서 아래로 봅니다. 테스트한 소스코드랑 라인과 확인해보면 call 순서를 파악할 수 있습니다.
(py37) allinux@lghnh # python abcd.py > /home/allinux/abcd.py(5)add() -> return a + b (Pdb) w /home/allinux/abcd.py(10)<module>() -> print(main()) /home/allinux/abcd.py(7)main() -> return add(3, 4) > /home/allinux/abcd.py(5)add() -> return a + b (Pdb)
댓글 입력