"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > eval\'d 코드에서는 구문 오류를 찾을 수 있지만 소스 코드에서는 찾을 수 없는 이유는 무엇입니까?

eval\'d 코드에서는 구문 오류를 찾을 수 있지만 소스 코드에서는 찾을 수 없는 이유는 무엇입니까?

2024년 11월 16일에 게시됨
검색:292

Why can I catch syntax errors in eval\'d code but not in my source code?

평가된 코드에서 구문 오류 처리

Python 코드로 작업할 때 eval 함수를 사용하여 동적으로 평가되는 코드 내에서 구문 오류가 발생하는 상황이 발생할 수 있습니다. . 이러한 오류를 포착하는 것이 가능하지만 소스 코드 자체의 구문 오류에 대해서는 동일하지 않습니다.

차이가 있는 이유는 무엇입니까?

이 동작을 이해하려면 다음을 기억하는 것이 중요합니다. Python의 실행 순서. 코드가 실행되면 Python 컴파일러는 먼저 코드를 구문 분석하고 컴파일하여 바이트코드를 생성합니다. 그런 다음 이 바이트코드는 Python 가상 머신(PVM)에 의해 해석됩니다.

소스 코드에 구문 오류가 있는 경우 컴파일러는 오류를 발견하고 컴파일 프로세스를 중지합니다. 결과적으로, 코드에 정의된 try/제외 블록은 결코 작동하지 않습니다.

그러나 eval을 사용할 때 eval 문 내의 코드는 주변 코드의 첫 번째 컴파일 이후 별도로 컴파일됩니다. 이는 두 번째 컴파일 실행 중에 eval 문 내의 구문 오류가 발생함을 의미합니다. try/exc 블록은 첫 번째 컴파일 중에 이미 설정되었으므로 평가된 코드에서 발생한 구문 오류를 포착할 수 있습니다.

의미

소스 코드는 실망스러울 수 있습니다. 그러나 이는 Python 구현의 본질적인 한계입니다. 컴파일러는 try/exc 메커니즘이 활성화되기 전에 첫 번째 실행을 완료해야 합니다.

해결 방법

소스 코드의 구문 오류를 처리하려면 컴파일 프로세스를 여러 번 트리거하는 방법을 찾아야 합니다. 이는 다음과 같은 기술을 사용하여 달성할 수 있습니다.

  • 평가 문에 코드 래핑
  • 컴파일 내장 기능 사용
  • 별도의 파일에서 코드 가져오기
  • exec 또는 execfile 사용
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3