다음 코드를 사용하여 Python의 최대 재귀 깊이를 실험적으로 결정하려고했습니다.
def recursive(i):
i = i + 1
try:
recursive(i)
except RuntimeError:
print 'max depth == %d' % i
exit(0)
recursive(0)
하지만 실행했을 때 이런 일이 발생했습니다.
[ hive ~ ]$ python recursive.py
max depth == 999
max depth == 998
max depth == 997
max depth == 996
max depth == 995
max depth == 994
내 프로그램 RuntimeError
이 처음 만났을 때 바로 종료되지 않고 5 번 더 호출을 계속 실행하는 이유는 무엇 recursive()
입니까?
대화 형 인터프리터에서 사용하기 위해 exit()
Python site
모듈이 설정 한 함수 를 사용하고 있습니다.
이것은 C 코드가 아니라 호출중인 Python 코드입니다. 이렇게하면 스택 제한에서 충분히 멀어 질 때까지 재귀 깊이 예외 처리기가 몇 번 더 트리거됩니다.
한계에 exit()
도달하면 스택 한계에 도달했기 때문에 호출 시도가 실패합니다. 따라서 a RuntimeError
가 발생하여 998
. 여기에서 exit()
다시 호출을 시도합니다. 다시 호출 을 시도하고 , 파이썬 함수 RuntimeError
를 마지막으로 호출하기에 충분한 스택 공간이 남을 때까지 다시 올리거나 , 다른 레벨로 떨어지는 등 의 작업을 더 시도 raise SystemExit()
합니다.
sys.exit()
스택에 더 많은 부담을주지 않으려면 대신 사용하십시오 .
또는 나중에 참조 할 수 있도록 sys.getrecursionlimit()
함수 를 사용 하여 제한이 무엇인지 직접 Python에 물어보십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다