2012-03-07 6 views
2

저는 아마추어 코딩을 잠시 동안 파이썬에서 해왔으며 꽤 편안하다고 느끼고 있습니다. 최근에 필자가 처음으로 데몬을 작성했지만 프로그램이 어떻게 진행되어야하는지에 대해 의견을 제시하려고합니다.파이썬 데몬 - 프로그램 구조 및 예외 제어

내 과거의 프로그램을 사용하면 예외를 처리 할 수 ​​있습니다. 아마도 약간의 정리 작업이 끝난 후입니다. 프로그램 구조에 내린 유일한 고려 사항은 비 예외 입력을 효과적으로 처리하는 것이 었습니다. 사실, "쓰레기가 들어간다, 아무것도 없어".

내 데몬에는 실제로 끝나지 않는 외부 루프와 그 내부에서 sleep 문이있어 상황이 발생하는 간격을 제어합니다. 유효한 입력 데이터를 처리하는 것은 쉽지만 예외 처리를위한 최선의 방법을 이해하는 데 어려움을 겪고 있습니다. 경우에 따라 여러 수준의 중첩 된 함수 내에서 예외가 발생할 수 있으며 각 부모는 부모에게 무언가를 반환해야합니다. 부모는 컨트롤이 가장 바깥 쪽 루프로 돌아올 때까지 부모에게 무언가를 반환해야합니다. 각 함수는 자체에 대해서뿐만 아니라 모든 종속에 대해서도 예외 조건을 처리 할 수 ​​있어야합니다.

내 질문의 모호함에 대해 사과하지만 누군가가 나에게 이러한 예외를 처리하는 방법에 대한 몇 가지 일반적인 지침을 제공 할 수 있는지 궁금합니다. 부모에게 영향을 미치지 않고 종료 될 수있는 하위 프로세스를 생성해야합니까? (원격) 가능성은 내가 올바르게 일을하고 실제로 모든 중첩 된 처리가 필요하다는 것입니다. 또 다른 실제 가능성은 내가 말하는 것에 대한 단서가 없다는 것입니다. :)

스티브

답변

0

대답은 "의존적"입니다.

일부 저수준 함수에서 예외가 발생하는 경우이 예외 수준에도 불구하고 함수가 성공적으로 완료 될 수 있도록이 수준에서 사용할 수있는 충분한 정보가 있으면 거기에서 catch하는 것이 적절할 수 있습니다. 예 : .stl 파일에서 삼각형을 읽을 때, 삼각형의 법선 벡터는 삼각형을 구성하는 세 점의 순서에 의해 명시 적으로 그리고 암시 적으로 주어진 삼각형의 법선 벡터입니다. 따라서 법선 벡터가 0 길이의 벡터 인 (0,0,0)으로 주어지고 Normal 벡터 클래스의 생성자에서 예외를 트리거해야하는 경우 Triangle 클래스의 생성자에서 안전하게 잡을 수 있습니다. 다른 방법으로 계산할 수 있기 때문입니다.

예외를 처리하는 데 사용할 수있는 정보가 충분하지 않은 경우 처리 할 수있는 수준까지 위쪽으로 가늘어 야합니다. 예 : 파일 형식을 읽고 해석 할 모듈을 작성하는 경우 제공된 파일이 파일 형식과 일치하지 않으면 예외가 발생합니다. 이 경우 예외를 처리하고 사용자와 통신해야하는 모듈을 사용하는 프로그램의 최상위 레벨 일 것입니다. (또는 데몬의 경우 오류를 기록하고 계속 수행하십시오.)

3

예외는 즉시 잡히지 않기 위해 설계된 것입니다. 즉, 함수가 " 오류". 각 예외는 원하는 것에 대해 (그리고 할 수있는) 레벨에서 잡힐 수 있습니다.

최소한 메인 루프에서 모든 예외를 포착하고 메시지를 로깅하는 것으로 시작할 수 있습니다. 이는 간단하며 데몬이 죽지 않도록합니다. 메인 루프에서는 대부분의 문제를 해결하기에는 너무 늦기 때문에 특정 예외를 조기에 발견 할 수 있습니다. 예 : 파일 형식이 잘못된 경우 열리는 루틴에서 예외를 catch하고 문제가 발견 된 구문 분석 코드가 아닌 파일을 사용하려고 시도합니다. 아마도 다른 형식을 시도해 볼 수 있습니다. 기본적으로 특정 오류 상태에서 복구 할 수있는 곳이 있으면 잡아서 그렇게하십시오.

+0

감사합니다. 내가 이해하지 못한 부분은 내가 원하는 수준에서 예외를 잡는 것이 었습니다. 나는 예외를 제기하고 더 높은 수준에서 그것을 붙잡을 수 있다는 것을 알지 못했다. 이로 인해 모든 기능 수준에서 가장 바깥 쪽 루프로 되돌아 가려고하는 것보다 훨씬 쉬워졌습니다. – Steve

+0

기꺼이 도와 드리겠습니다. 당신이 새로 입문 한 이래로 : 귀하의 질문에 답한 것을 발견하면 "대답"하십시오. – alexis