728x90
반응형
Python의 sys.exit() 는 소스코드 내에서 프로그램을 종료(=pvm종료)시키기 위해 호출하는 함수임.
- 호출(call)할 때, 종료 상태 코드를 argument로 전달받음.
- 해당 종료상태코드는
sys모듈을 통해 os로 넘어감. - built-in 함수인 exit()와 마찬가지로 SystemExit 객체를 발생(raise)시킴.

참고로 Jupyter NoteBook에선 kernel을 종료시키지 않고, 해당 셀의 실행만 종료시킴.
- 일반 파이썬 스크립트:
- 일반 .py 스크립트에서는 이 SystemExit 예외가 처리되지 않으면
- 파이썬 인터프리터가 프로그램을 종료시킴.
- Jupyter Notebook (IPython 커널):
- Jupyter Notebook의 커널은 사용자의 편의를 위해 매우 안정적으로 설계됨.
- Jupyter의 IPython 커널은 이 SystemExit 예외를 의도적으로 가로채서(catch) 처리함.
- 예외를 가로채서 해당 셀의 코드 실행만 멈추고 커널은 계속 살아있도록 함.
사용가능한 argument의 종류는 다음과 같음:
1. 정수 (Integer)
- 0:
- 정상 종료를 나타냄.
- 즉,
sys.exit(0)은 프로그램이 정상적으로 종료되었음을 os에 알림.
- 그 외의 값:
- 에러 종료를 나타냄.
- 일반적으로 오류가 발생했을 때
1이상의 값을 사용함. - 오류시 0 이외의 어떤 값이든 가능하지만, 관례상
1이 자주 사용됨. - 예를 들어,
sys.exit(1)은 프로그램이 오류로 인해 종료되었음을 의미함.
2. None
None값을 전달하면 기본적으로sys.exit(0)과 동일하게 취급되어 정상 종료로 간주됨.- 즉,
sys.exit()또는sys.exit(None)은 프로그램을 정상적으로 종료하는 것과 마찬가지임.
3. 문자열 (String)
- 문자열을 argument(인수)로 전달하면, 해당 문자열이 표준 오류 스트림(
stderr)에 출력되고 이 후에 프로그램이 종료됨. - 이 경우에도 종료 상태 코드는
1로 설정됨. - 예를 들어,
sys.exit("Error: Invalid input")은- 프로그램을 종료하면서
- "Error: Invalid input"이라는 문자열을
stderr에 출력함.
4. 객체 (Object)
- Object를 argument로 전달할 수 있음.
- 전달된 object가 string으로 변환될 수 있는 경우(
__str__이 동작)엔 변환된 문자열이 출력된 후 종료. - 문자열로 변환이 불가능하면 그냥 종료됨.
- 이 경우에도 비정상 종료로 간주되어 상태 코드가
1로 os에 전달됨.
사용 예시:
import sys
# 정상 종료
sys.exit(0) # 또는 sys.exit()나 sys.exit(None)
# 오류 종료
sys.exit(1)
# 오류 메시지 출력 후 종료
sys.exit("An error occurred.")
terminal의 shell을 통해 위의 코드들을 실행하는 python 스크립트를 실행하고 나서
Windows의 cmd prompt 에서는 %ERRORLEVEL% 을 echo 명령어로 출력하면 종료상태코드를 볼 수 있고,
bash, zsh 등의 경우에는 $? 를 사용하면 된다.
같이 읽어보면 좋은 자료들
sys 모듈 관점에서의 설명이 필요하면 다음 글에서 exit부분을 참고:
2023.09.25 - [Python] - [Python] sys 모듈
[Python] sys 모듈
Python VM (or Interpreter) 와의 상호작용 담당. sys 모듈은interpreter에 의해 사용되거나 유지되는 variables 와interpreter와 밀접(interpreter 종료 등)하게 관련된 functions 에대한 access를 제공함. 주로 많이 이용
ds31x.tistory.com
728x90
'Python' 카테고리의 다른 글
| [Etc] SW Version: Semantic Versioning + packaging.version (0) | 2024.09.19 |
|---|---|
| [Summary] NumPy(Numerical Python) (3) | 2024.09.12 |
| [Py] Namespace Package (0) | 2024.09.11 |
| [CV] Chessboard관련 함수들: OpenCV (1) | 2024.09.10 |
| [NumPy] ravel() 메서드 with flatten() 메서드 (0) | 2024.09.09 |