Python 기초 튜 토리 얼 이상 상세 설명

요약
Python 은 프로그램 이 실행 되 는 동안 발생 한 오 류 를 관리 하기 위해 이상 하 다 고 불 리 는 특수 대상 을 사용 합 니 다.Python 을 당황 하 게 하 는 오류 가 발생 할 때마다 이상 한 대상 을 만 듭 니 다.이 이상 한 코드 를 만 들 었 다 면 프로그램 은 계속 실 행 될 것 입 니 다.이상 을 처리 하지 않 으 면 프로그램 이 중단 되 고 traceback 을 표시 합 니 다.이상 에 대한 보고 가 포함 되 어 있 습 니 다.
이상 은 try-except 코드 블록 으로 처 리 됩 니 다.try-except 코드 블록 은 Python 에 게 지정 한 작업 을 수행 하 게 하고 Python 에 이상 이 발생 했 을 때 어떻게 하 는 지 알려 줍 니 다.try-except 코드 블록 을 사 용 했 을 때 이상 이 발생 하 더 라 도 프로그램 은 계속 실 행 됩 니 다.사용 자 를 현혹 시 키 는 traceback 이 아 닌 우호 적 인 오류 메 시 지 를 표시 합 니 다.
이상
ZeroDivisionError 이상 처리:try-except&try-except-else

위 traceback 에서 지적 한 오 류 는 ZeroDivisionError 가 이상 대상 입 니 다.Python 이 원 하 는 대로 할 수 없 을 때 이 대상 을 만 듭 니 다.이 경우 파 이 썬 은 프로그램 실행 을 중단 하고 어떤 이상 을 일 으 켰 는 지 지적 하 며 이 정보 에 따라 프로그램 을 수정 할 수 있 습 니 다.다음 에 우 리 는 try-except 를 사용 하여 파 이 썬 에 게 이런 오류 가 발생 했 을 때 어떻게 하 는 지 알려 줄 것 이다.

잘못된 코드 줄 print(5/0)를 try 코드 블록 에 넣 었 습 니 다.try 코드 블록 에 있 는 코드 가 실행 되 는 데 문제 가 없다 면 Python 은 except 코드 블록 을 건 너 뜁 니 다.try 코드 블록 에 있 는 코드 가 오 류 를 일 으 키 면 Python 은 이러한 exception 코드 블록 을 찾 아 그 중의 코드 를 실행 합 니 다.즉,지정 한 오 류 는 발생 한 오류 와 같 습 니 다.이 예제 에서 try 코드 블록 에 있 는 코드 는 ZeroDivisionError 이상 을 일 으 켰 습 니 다.따라서 Python 은 문 제 를 해결 해 야 할 except 코드 블록 을 지적 하고 코드 를 실행 합 니 다.이렇게 해서 사용자 가 본 것 은 traceback 이 아 닌 우호 적 인 오류 메시지 입 니 다.try-except 코드 블록 뒤에 다른 코드 가 있 으 면 프로그램 이 계속 실 행 됩 니 다.Python 이 이러한 오 류 를 어떻게 처리 하 는 지 알려 주 었 기 때 문 입 니 다.
이상 사용 시 충돌 방지:
오류 가 발생 했 을 때,만약 절차 가 아직 완성 되 지 않 았 다 면,잘못 을 적절하게 처리 하 는 것 이 특히 중요 하 다.이러한 상황 은 사용자 에 게 입력 을 요구 하 는 프로그램 에 자주 나타난다.프로그램 이 잘못된 입력 을 잘 처리 할 수 있다 면 충돌 하지 않 고 효과 적 인 입력 을 제공 하 는 것 을 알려 줄 수 있 습 니 다.

print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
 first_number = input("
First number: ") if first_number == 'q': break second_number = input("Second number: ") if second_number == 'q': break answer = int(first_number) / int(second_number) print(answer)
이 프로그램 은 오 류 를 처리 하 는 조 치 를 취하 지 않 았 기 때문에 0 으로 나 누 는 나눗셈 연산 을 실행 할 때 무 너 집 니 다.

Give me two numbers, and I'll divide them.
Enter 'q' to quit.
First number: 5
Second number: 0
Traceback (most recent call last):
 File "division.py", line 9, in <module>
  answer = int(first_number) / int(second_number)
ZeroDivisionError: division by zero
프로그램 이 무 너 지 는 것 은 좋 지 않 지만 traceback 을 보 여 주 는 것 도 좋 은 생각 은 아 닙 니 다.기술 을 모 르 는 사용 자 는 그들 에 의 해 헷 갈 릴 수 있 으 며,사용자 가 악 의 를 품 고 있다 면,그 는 traceback 을 통 해 그 가 알 고 싶 지 않 은 정 보 를 알 게 될 것 이다.예 를 들 어,그 는 당신 의 프로그램 파일 의 이름 을 알 게 될 것 이 며,일부 제대로 실행 되 지 않 는 코드 도 볼 것 이다.때때로 잘 훈련 된 공격 자 는 이러한 정보 에 따라 당신 의 코드 에 대해 어떤 공격 을 할 수 있 는 지 판단 할 수 있다.
오 류 를 일 으 킬 수 있 는 코드 를 try-except 코드 블록 에 넣 으 면 이 프로그램 이 오 류 를 막 는 능력 을 향상 시 킬 수 있 습 니 다.오 류 는 나눗셈 연산 을 실행 하 는 코드 줄 에 의 한 것 이기 때문에 try-except 코드 블록 에 넣 어야 합 니 다.이 예제 에는 else 코드 블록 도 포함 되 어 있 습 니 다.try 코드 블록 에 의존 하여 성공 적 으로 실 행 된 코드 는 모두 else 코드 블록 에 넣 어야 합 니 다.

print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
 first_number = input("
First number: ") if first_number == 'q': break second_number = input("Second number: ") try: answer = int(first_number) / int(second_number) except ZeroDivisionError: print("You can't divide by 0!") else: print(answer)
Python 에 게 try 코드 블록 의 나눗셈 연산 을 시도 하 게 합 니 다.이 코드 블록 은 오류 가 발생 할 수 있 는 코드 만 포함 되 어 있 습 니 다.try 코드 블록 에 의존 하여 성공 적 으로 실 행 된 코드 는 모두 else 코드 블록 에 놓 여 있 습 니 다.이 예제 에서 만약 나눗셈 연산 이 성공 한다 면,우 리 는 else 코드 블록 을 사용 하여 결 과 를 인쇄 할 것 이다.except 코드 블록 은 Python 에 게 ZeroDivisionError 이상 이 발생 했 을 때 어떻게 해 야 하 는 지 알려 줍 니 다.만약 try 코드 블록 이 0 오 류 를 제거 하 는 데 실패 하면 우 리 는 우호 적 인 메 시 지 를 인쇄 하여 사용자 에 게 이러한 오 류 를 피 하 는 방법 을 알려 줍 니 다.프로그램 이 계속 실 행 됩 니 다.사용 자 는 traceback 을 볼 수 없습니다.

Give me two numbers, and I'll divide them.
Enter 'q' to quit.
First number: 5
Second number: 0
You can't divide by 0!
First number: 5
Second number: 2
2.5
First number: q
try-except-else 코드 블록 의 작업 원 리 는 대체적으로 다음 과 같다.Python 은 try 코드 블록 의 코드 를 실행 하려 고 시도 한다.이상 을 일 으 킬 수 있 는 코드 만 try 구문 에 넣 어야 합 니 다.때때로 try 코드 블록 이 성공 적 으로 실 행 될 때 만 실행 해 야 하 는 코드 가 있 습 니 다.이 코드 들 은 else 코드 블록 에 넣 어야 합 니 다.except 코드 블록 은 Python 에 게 try 코드 블록 의 코드 를 실행 하려 고 시도 할 때 지정 한 이상 이 발생 하면 어떻게 해 야 하 는 지 알려 줍 니 다.오류 가 발생 할 수 있 는 코드 를 예측 하여 건장 한 프로그램 을 만 들 수 있 습 니 다.잘못된 데이터 나 자원 이 부족 하 더 라 도 계속 실행 하여 의도 치 않 은 사용자 오류 와 악의 적 인 공격 을 막 을 수 있 습 니 다.
FileNotFound 오류 처리 중:
파일 을 사용 할 때 흔히 볼 수 있 는 문 제 는 파일 을 찾 을 수 없다 는 것 입 니 다.찾 으 려 는 파일 이 다른 곳 에 있 을 수도 있 고 파일 이름 이 정확 하지 않 을 수도 있 으 며 이 파일 이 존재 하지 않 을 수도 있 습 니 다.이 모든 상황 에 대해 try-except 코드 블록 을 사용 하여 직관 적 인 방식 으로 처리 할 수 있 습 니 다.

filename = 'alice.txt'
with open(filename) as f_obj:
 contents = f_obj.read()
열 려 고 하 는 파일(alice.txt)이 존재 하지 않 을 때 python 은 다음 과 같은 이상 을 보고 합 니 다.

Traceback (most recent call last):
 File "alice.py", line 3, in <module>
  with open(filename) as f_obj:
FileNotFoundError: [Errno 2] No such file or directory: 'alice.txt' 
위 traceback 에서 마지막 줄 은 FileNotFoundation Error 이상 을 보 고 했 습 니 다.이것 은 Python 이 열 파일 을 찾 을 수 없 을 때 만 든 이상 입 니 다.이 예제 에서 이 오 류 는 함수 open()으로 인 한 것 입 니 다.따라서 이 오 류 를 처리 하려 면 try 문 구 를 open()을 포함 하 는 코드 줄 앞 에 두 어야 합 니 다.

filename = 'alice.txt'
try:
 with open(filename) as f_obj:
  contents = f_obj.read()
 except FileNotFoundError:
  msg = "Sorry, the file " + filename + " does not exist."
  print(msg)
분석 텍스트:
split()함수,아래 의 예 를 보 세 요.이 함수 가 무엇 을 했 는 지.

>>> title = "Alice in Wonderland"
>>> title.split()
['Alice', 'in', 'Wonderland']
split()는 빈 칸 을 구분자 로 하여 문자열 을 여러 부분 으로 나 누고 이 부분 을 목록 에 저장 합 니 다.결 과 는 문자열 에 있 는 모든 단 어 를 포함 하 는 목록 입 니 다.일부 단 어 는 구두점 을 포함 할 수 있 지만.Alice in Wonderland 가 몇 개의 단 어 를 포함 하고 있 는 지 계산 하기 위해 서,우 리 는 전체 소설 에 split()를 호출 하고,다시 계산 한 목록 에 몇 개의 요 소 를 포함 하고 있 는 지 를 계산 하여,전체 동화 에 대략 몇 개의 단 어 를 포함 하고 있 는 지 확인 할 것 이다.

filename = 'alice.txt'
try:
 with open(filename) as f_obj:
  contents = f_obj.read()
 except FileNotFoundError:
  msg = "Sorry, the file " + filename + " does not exist."
  print(msg)
 else:
  #              
  words = contents.split()
  num_words = len(words)
  print("The file " + filename + " has about " + str(num_words) + " words.")
파일 alice.txt 를 올 바른 디 렉 터 리 로 옮 겨 try 코드 블록 을 성공 적 으로 실행 할 수 있 도록 합 니 다.변수 contents(이것 은 현재 동화 Alice in Wonderland 의 모든 텍스트 를 포함 하 는 긴 문자열 입 니 다)호출 방법 split()를 사용 하여 목록 을 만 듭 니 다.이 동화 의 모든 단 어 를 포함 합 니 다.이 목록 의 길 이 를 확인 하기 위해 len()을 사용 하면 원본 문자열 이 몇 개의 단 어 를 포함 하고 있 는 지 알 수 있 습 니 다.파일 에 몇 개의 단 어 를 포함 하고 있 는 지 알려 주 는 메 시 지 를 인쇄 합 니 다.이 코드 들 은 모두 else 코드 블록 에 놓 여 있 습 니 다.try 코드 블록 이 성공 적 으로 실행 되 었 을 때 만 실 행 됩 니 다.출력 은 파일 alice.txt 에 몇 개의 단 어 를 포함 하 는 지 알려 줍 니 다.
여러 파일 사용 하기:

def count_words(filename):
 """               """
 try:
  with open(filename) as f_obj:
   contents = f_obj.read()
 except FileNotFoundError:
  msg = "Sorry, the file " + filename + " does not exist."
  print(msg)
 else:
  #              
  words = contents.split()
  num_words = len(words)
  print("The file " + filename + " has about " + str(num_words) +
" words.")

filename = 'alice.txt'
count_words(filename)
그리고 이 함 수 를 사용 하여 여러 파일 을 분석 할 수 있 도록 순환 을 만 듭 니 다.

filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
 count_words(filename)
filenames 목록 에 있 는 siddhartha.txt 파일 은 존재 하지 않 습 니 다.우리 프로그램 도 정상적으로 실 행 될 수 있 습 니 다.try-except 코드 블록 을 사용 하여 두 가지 중요 한 장점 을 제공 합 니 다.사용자 에 게 traceback 을 보이 지 않도록 합 니 다.프로그램 이 찾 을 수 있 는 다른 파일 을 계속 분석 할 수 있 도록 합 니 다.siddhartha.txt 를 찾 지 못 해 발생 하 는 FileNotFoundError 이상 을 포착 하지 않 으 면 사용 자 는 완전한 traceback 을 볼 수 있 고 프로그램 은 Siddhartha 를 분석 한 후에 실행 을 중단 합 니 다―Moby Dick 과 Little Women 을 분석 하지 않 습 니 다.
이전 예제 에서 우 리 는 사용자 에 게 파일 을 찾 을 수 없다 고 알려 주 었 다.그러나 이상 이 잡 힐 때마다 사용자 에 게 알려 야 하 는 것 은 아 닙 니 다.가끔 은 프로그램 이 이상 이 생 겼 을 때 아무 말 도 하지 않 고 아무 일 도 일어나 지 않 은 것 처럼 계속 실행 되 기 를 바 랍 니 다.프로그램 이 실 패 했 을 때 한 마디 도 하지 않 으 려 면 보통 처럼 try 코드 블록 을 만 들 수 있 지만 except 코드 블록 에 서 는 Python 에 게 아무것도 하지 말 라 고 명확 하 게 알려 줍 니 다.Python 은 pass 문 구 를 가지 고 있 습 니 다.코드 블록 에서 Python 이 아무것도 하지 않도록 사용 할 수 있 습 니 다.

def count_words(filename):
"""               """
 try:
  --snip--
 except FileNotFoundError:
  pass
 else:
  --snip--
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
 count_words(filename)
이전 프로그램 에 비해 이 프로그램의 유일한 차이 점 은 패스 문 구 였 다.현재 FileNotFoundError 이상 이 발생 했 을 때 exception 코드 블록 에 있 는 코드 를 실행 하지만 아무 일 도 일어나 지 않 습 니 다.이 오류 가 발생 했 을 때 traceback 도 나타 나 지 않 고 출력 도 없습니다.사용 자 는 존재 하 는 모든 파일 에 몇 개의 단 어 를 포함 하고 있 는 지 볼 수 있 지만,파일 을 찾 지 못 한 흔적 은 전혀 없습니다.
패스 문 구 는 자리 표시 자 역할 도 합 니 다.프로그램 어 딘 가 에서 아무것도 하지 않 았 고 앞으로 여기 서 무엇 을 해 야 할 지 알려 줍 니 다.예 를 들 어 이 프로그램 에서 찾 을 수 없 는 파일 의 이름 을 파일 missing 에 쓰기 로 결정 할 수 있 습 니 다.files.txt 중.사용 자 는 이 파일 을 볼 수 없 지만,우 리 는 이 파일 을 읽 어서 모든 파일 에서 찾 을 수 없 는 문 제 를 처리 할 수 있 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기