python 기초 강좌(제3판) 학습 노트(8)

4263 단어
제8장 이상 사건은 오류(예를 들어 0으로 나누려는 시도)일 수도 있고, 통상적으로 발생하지 않는 일일 수도 있다.이러한 이상 사건을 처리하기 위해 발생할 수 있는 모든 곳에서 이상 처리 메커니즘을 사용할 수 있다.8.1 이상이란 어떤 파이톤이 이상 대상을 사용하여 이상 상태를 표시하고 오류가 발생했을 때 이상을 일으키는 것입니까?이상 대상이 처리되지 않았을 때, 프로그램은 오류 메시지 (traceback) 를 종료하고 표시합니다.8.2 당신이 지정한 궤도를 따라 일이 잘못될 수 있도록 8.2.1 raise 문장에 이상을 일으키려면raise 문장을 사용하고 하나의 클래스(Exception의 하위 클래스여야 함)나 실례를 매개 변수로 사용할 수 있습니다.클래스를 매개 변수로 사용할 때 자동으로 실례를 생성합니다. ''
raise Exception(" !")

'''
Traceback (most recent call last):
  File "xx.py", line 9, in 
    raise Exception(" !")
Exception:  !


------------------
(program exited with code: 1)

 . . .

이 예(raise Exception)에서 공통 예외가 발생하고 오류 메시지가 추가되었습니다. 여기 예외가 발생했습니다!python에서 이상이 클래스입니다.그 중에서 Exception은 일반적인 이상 클래스이고, 기타 거의 모든 이상은 그것에서 파생된 것이다.공통 예외 외에 다음과 같은 예외 클래스가 있습니다: i, 속성 예외 AttributeError가 속성을 인용하거나 값을 부여하는 데 실패할 때ii, 시스템 예외 OSError 운영체제가 지정한 작업을 수행할 수 없을 때(예를 들어 파일을 열 때), 여러 개의 하위 클래스 iii, 인덱스 예외 Index Error가 시퀀스에 존재하지 않는 인덱스를 사용할 때 발생합니다.LookupError의 하위 클래스 iv, 키 이상 KeyError에 맵에 존재하지 않는 키를 사용할 때, LookupError의 하위 클래스 v, 이름 이상 NameError에 대해 이름(변수)을 찾을 수 없을 때vi, 코드 이상 Syntax Error 코드가 정확하지 않을 때vii,유형 이상 TypeError는 내장 작업이나 함수를 형식이 올바르지 않은 대상에 사용할 때vii를 일으키고, 값 이상ValueError는 내장 작업이나 함수를 이런 대상에 사용할 때 일으킨다. 그 유형이 정확하지만 포함된 값이 ix에 적합하지 않다. 제외 이상 ZeroDivisionError는 제법 또는 모형 연산의 두 번째 파라미터가 0일 때 8.2.2 사용자 정의 이상 클래스를 만드는 것과 같이 8.2.2그러나 Exception을 직접 또는 간접적으로 상속해야 합니다.사용자 정의 이상 클래스에 방법을 추가할 수도 있습니다. ''
 
class My_Exception(Exception):
    def __init__(self):
        print(" , 。")

    
'8.3 포획 이상 사용try/except 문장으로 이상이 발생할 수 있는 곳에서 포획 이상.
try:
    x=int(input(" :"))
    y=int(input(" :"))
    print(x/y)
except ZeroDivisionError:
    print(" , !")

'''      '''
 :3
 :0
 , !


------------------
(program exited with code: 0)

 . . .

8.3.1 파라미터를 제공하지 않고 이상을 포획한 후 다시 그것을 일으키려면raise를 호출할 수 있으며 어떠한 파라미터도 제공하지 않습니다.8.3.2 여러 except 서브문장 형식''
try:
    pass
except Exception:
    pass
    pass
except My_Exception:
    pass
    pass

'8.3.3 일거양득 except 자구를 사용하여 여러 가지 이상을 포착하려면 한 원조에서 이러한 이상을 지정할 수 있다. 아래와 같다.
try:
    pass
except (A_Error,B_Error,C_Error):
    pass

'8.3.4 포획 대상은 except 자구에서 이상 대상 자체에 접근해야 하며, 매개 변수가 아닌 두 개를 사용할 수 있습니다.(여러 개의 이상을 포착할 때에도 except에 하나의 매개 변수인 원조만 제공한다는 것을 주의하십시오.)''
try:
    x=int(input(" :"))
    y=int(input(" :"))
    print(x/y)
except ZeroDivisionError as e:
    print(" , !",e)

'''
 :1
 :0
 , ! division by zero


------------------
(program exited with code: 0)

 . . .

여기서 division by zero는 매개변수 e로 캡처된 ZeroDivision Error 객체입니다.8.3.5 한 단락의 코드를 사용하여 모든 이상을 포착하려면 except 문장에 어떤 이상 클래스도 지정하지 않으면 된다.다음과 같습니다.
try:
    pass
except:
    print(" 。 !! 。")

'이렇게 모든 이상을 포착하는 것은 위험하다. 왜냐하면 이것은 당신이 마음의 준비를 하고 있는 잘못을 숨길 뿐만 아니라 당신이 고려하지 않은 잘못도 숨길 수 있기 때문이다.8.3.6만 사대길, 어떤 경우에는 이상이 없을 때 코드 블록을 실행하는 것이 유용하다.이를 위해 조건문과 순환처럼try/except문구에 else와finally 자구를 추가할 수 있습니다.(이하 코드는 탕 선생님 강의 노트)''
try:
    # 
    pass
except Exception:
    # 
    pass
else:
    # 
    pass
finally:
    # 
    pass

'8.3.7 마지막 finally 자구는 이상이 발생했을 때 청소 작업을 수행할 수 있습니다.이 자구는try 자구와 조립된 것이다.
8.4이상은 함수 이상과 함수와 천연적인 관계를 가진다.함수에서 발생하는 이상을 처리하지 않으면, 함수를 호출하는 곳으로 전파됩니다.만약 그곳에서도 처리되지 않는다면, 이상은 메인 프로그램 (전역 역할 영역) 에 도달할 때까지 계속 전파될 것이다.주 프로그램에도 이상 처리 프로그램이 없으면, 프로그램은 창고 추적 메시지를 종료하고 표시합니다.
8.5 이상 선의 이상 처리는 그리 복잡하지 않다.코드가 어떤 이상을 일으킬 수 있다는 것을 알고 프로그램이 종료하고 창고 추적 메시지를 표시하지 않으려면, 필요한try/except 또는try/finally 문장을 추가하거나 결합해서 사용할 수 있습니다.어떤 임무는if/else를 사용하여 완성할 때 자연스러워 보이지만try/except를 사용하여 완성하는 것이 훨씬 낫다.8.6 그다지 이상하지 않은 상황 경고 경고, 상황이 정상 궤도에서 벗어났다는 것을 지적하고 모듈 Warnings의 함수 Warn을 사용할 수 있습니다."
from warnings import warn
warn(" ")

'''
xx.py:2: UserWarning:  
  warn(" ")


------------------
(program exited with code: 0)

 . . .

(계속)

좋은 웹페이지 즐겨찾기