서문: 이전에 작업할 때 Python을 사용하여 직렬 포트를 사용하여 SCPI를 보내고 마이크로 컨트롤러와 상호 작용하는 명령줄 창을 완성했습니다. 기능을 구현할 때 Python을 사용하여 최종 올바른 값 또는 데이터 결과의 잘못된 값 메인 인터페이스로 직접 돌아갈 수 있습니다. 분명히 다른 의미를 가진 데이터를 직접 반환하는 것은 불가능하므로, 잘못된 값을 가진 데이터를 처리하기 위해 예외 메커니즘이 사용됩니다. 이전에는 이상현상에 대해 잘 몰랐기 때문에 여기서 몇 가지 정보를 확인하고 몇 가지 메모를 정리했습니다.
기사 디렉토리
1. 예외 이해하기
1. 오류와 예외의 차이점
3.
2. 파이썬의 5가지 주요 예외 처리 메커니즘
1. 기본 예외 처리 메커니즘
2. try....exc...처리 메커니즘
3. ..처리 메커니즘
4. 어설션 처리 메커니즘
5. 처리 메커니즘으로
3. 예외 사용자 정의
2. 3. 예외 캡처
4. 예외 사용 시 주의 사항
1. 예외 메커니즘에 너무 의존하지 마세요
2. Done. 캡처된 예외를 무시하지 마세요
요약
(무료 학습 권장 사항:
python 비디오 튜토리얼
)
1. 예외의 이해 1. 란 무엇입니까? 비정상 비정상이란 "정상적인 상태와 다르다"는 뜻입니다. 정상이란 인터프리터가 코드를 해석할 때 우리가 작성한 코드가 인터프리터가 정의한 규칙을 준수한다는 것을 의미합니다. 즉, 인터프리터가 특정 코드 조각이 문법을 준수하지만 비정상일 수 있음을 발견하면 정상입니다. 인터프리터는 프로그램의 정상적인 실행을 방해하는 이벤트를 발생시킵니다. 이 중단된 신호는
비정상 신호
입니다. 따라서 전체적인 설명은 인터프리터가 프로그램에서 오류를 감지하면 예외를 생성하고 프로그램이 이를 처리하지 않으면 예외가 발생하고 프로그램이 종료된다는 것입니다. 빈 .py 파일에 int("m")를 쓸 수 있으며 실행 후 결과는 다음과 같습니다.
이 글꼴 문자열은 인터프리터에서 발생하는 일련의 오류 메시지입니다. int()에 전달된 매개변수는 숫자 문자열과 숫자만 지원하므로 분명히 'm'은 전달된 매개변수에 속하지 않습니다. 가 잘못되었으므로 설명은 다음과 같습니다. 장치가 "valueError" 오류를 보고합니다.
2. 오류와 예외의 차이점
Python 오류 개요: 코드가 실행되기 전의 구문 또는 논리적 오류를 나타냅니다 . 일반적인 구문 오류를 예로 들면, 우리가 작성한 코드가 구문 테스트를 통과하지 못하면 프로그램이 실행되기 전에 구문 오류가 직접 나타나며, 그렇지 않으면 작성된 코드가 실행되지 않습니다. 그리고 캡처할 수 없습니다. 예를 들어 a = 1 print("hello")가 .py 파일에 입력된 경우 출력 결과는 다음과 같습니다.
Traceback (most recent call last):
File "E:/Test_code/test.py",line 1
if a = 1 print("hello")
^SyntaxError: invalid syntax
로그인 후 복사
print() 함수에 콜론이 누락되어 오류가 있는 것으로 확인되었습니다. 파서는 구문 오류가 있는 코드 줄을 재현하고 작은 "화살표"를 사용하여 줄에서 감지된 첫 번째 오류를 가리킵니다. 따라서 해당 위치를 직접 찾고 구문을 수정할 수 있습니다. 물론, 문법적인 오류 외에도 메모리 오버플로 등의 프로그램 충돌 오류도 많이 있습니다. 이러한 오류는 상대적으로 숨겨져 있는 경우가 많습니다. 오류에 비해 Python 예외는 프로그램 실행 중 논리적 또는 알고리즘적 문제가 발생할 때 주로 발생합니다. 인터프리터가 이를 처리할 수 있으면 문제가 없으며 프로그램을 직접 종료하고 오류를 발생시킵니다. 첫 번째 지점의 int('m') 예제와 같은 예외는 매개변수가 잘못 전달되었기 때문에 프로그램 오류가 발생합니다. 논리로 인해 발생하는 모든 종류의 예외가 있습니다. 다행히도 우리 통역사에는 다양한 유형의 예외가 내장되어 있어 어떤 종류의 예외가 발생하는지 알 수 있으므로 "올바른 약을 처방"할 수 있습니다. 여기서 위의 구문 오류는 인식된 오류이므로 통역사도 기본적으로 SyntaxError 예외 메시지를 발생시켜 프로그래머에게 피드백합니다. 따라서 본질적으로 대부분의 오류는 출력 및 인쇄가 가능하지만 오류 코드가 실행되지 않기 때문에 처리할 수 없으므로 오류 예외 정보를 캡처하는 것이 의미가 없게 됩니다. 3. Python 예외의 일반적인 유형
다음은 코드를 작성할 때 가장 일반적인 예외 유형입니다. 다른 유형의 예외가 발생하면 당연히 Baidu를 선택하세요~
number = 'hello'try: print(number[500]) #数组越界访问except IndexError as e: print(e)except Exception as e: #万能异常
print(e)except: #默认处理所有异常
print("所有异常都可处理")print("继续运行...")
로그인 후 복사
输出结果如下所示,会输出系统自带的提示错误:string index out of range,相对于解释器因为异常自己抛出来的一堆红色刺眼的字体,这种看起来舒服多了(能够“运筹帷幄”的异常才是好异常嘛哈哈哈)。另外这里用到“万能异常”Exception,基本所有没处理的异常都可以在此执行。最后一个except表示,如果没有指定异常,则默认处理所有的异常。
finally! #异常没被捕获,也执行了finallyTraceback (most recent call last):
File "E:/Test_code/test.py",line 3,in <module>
print("abc")NameError: name 'abc' is not defined
number = 'hello'try: print(abc) #变量未被定义,抛出NameError异常finally: print("finally!")print("继续运行...")
로그인 후 복사
运行结果:
finally! #异常没被捕获,也执行了finallyTraceback (most recent call last):
File "E:/Test_code/test.py",line 3,in <module>
print("abc")NameError: name 'abc' is not defined
try 블록에 많은 코드를 배치하는 것은 "간단"해 보이고 코드 프레임워크도 이해하기 쉽습니다. 그러나 try 블록의 코드가 너무 크고 비즈니스가 너무 복잡하기 때문에 다음과 같은 가능성이 있습니다. try 블록의 예외가 크게 증가하여 이상 원인을 분석하기가 더 어려워졌습니다. 그리고 블록이 너무 크면 다양한 예외에 대해 서로 다른 처리 논리를 제공하기 위해 많은 수의 제외 블록이 있는 try 블록을 따라야 하는 것이 불가피합니다. 동일한 try 블록 뒤에 많은 수의 제외 블록이 따라오는 경우 이들 사이의 논리적 관계를 분석해야 하므로 프로그래밍 복잡성이 증가합니다. 따라서 큰 try 블록을 여러 개의 작은 블록으로 분할한 다음 각각 예외를 포착하고 처리할 수 있습니다.
3. 잡힌 예외를 무시하지 마세요
예외를 무시하지 마세요! 이제 예외가 포착되었으므로 제외 블록은 유용한 작업을 수행하고 예외를 처리하고 수정해야 합니다. 블록을 제외한 전체를 비워두거나, 단순 예외 정보만 출력하는 것은 부적절합니다! 구체적인 처리 방법은 다음과 같습니다. ①예외 처리. 예외를 적절하게 수정한 다음 예외가 발생한 곳을 우회하여 계속 실행하거나 예상된 메서드 반환 값 대신 다른 데이터를 사용하여 계산을 수행하거나 사용자에게 프로그램을 다시 실행하라는 메시지를 표시합니다. 프로그램이 작업을 재개할 수 있도록 예외를 복구해야 합니다. ② 새로운 예외를 다시 발생시킵니다. 현재 실행 중인 환경에서 할 수 있는 일을 최대한 완성한 뒤, 예외를 번역하고, 현재 계층의 예외로 패키징한 후 상위 계층 호출자에게 다시 전달합니다. ③적절한 레이어에서 예외를 처리하세요. 현재 계층에서 예외 처리 방법을 모르는 경우 현재 계층에서 예외 문을 사용하여 예외를 포착하지 말고 상위 계층 호출자가 예외 처리를 담당하도록 하세요.
요약
이 문서는 시스템의 기본 예외로 시작하여 예외가 무엇인지 설명하고 시스템의 일반적인 예외 클래스를 요약한 다음 예외 정의부터 발생, 사용자 지정 예외 가져오기까지 예외를 사용자 지정하는 방법을 작성합니다. .예외의 정의와 사용법을 정의하고, 마지막으로 파이썬 예외를 사용할 때의 주의사항을 요약합니다.