# Ctrl + K : 변수 생성 단축키
# Ctrl + T : Try Catch 액티비티로 감싸주기
# Write Line -> Boolean 타입도 .Tostring 필요
<목차>** 예외처리 |
실행 중 발생할
모든 경우의 수를 알 수는 없지만
예외처리로 불안정성을
줄여나갈 수는 있다.
** 예외처리
* RPA 개발에서 가장 중요한 것은 예외처리 라고 생각한다.
고도의 통제된 상황이 아니라면,
원하는 logic에 대한 예외 상황은 반드시 발생하기 때문이다.
이러한 '예외 상황을 얼마나 잘 통제하는가'는
곧 개발자의 역량이자
그에 대한 신뢰도의 지표가 될 것이다.
오늘은 이렇듯 중요한 예외처리를 다루어보고자 한다.
1. 예외처리의 중요성**
개인의 PC 사양은 전부 다르고, 인터넷 환경 또한 다 다르다.
그리고 앞서 한번 다룬 적이 있듯이(
), 작업 사이트의 상태 또한 매번, 매순간 천차만별이다.
이러한 상황에서 개발자가 해야 하는 것은 앞서 말했듯이 예상 가능 또는 불가능한 예외처리이다.
물론 100%의 예외를 다루는 것은 불가능하지만,
개발자는 예상 가능한 또는 불가능한 모든 예외 상황에 대하여 대응책을 미리 마련해 놓아야 한다.
또한 미리 잡아내지 못한 것들은 지속적인 업데이트로 개선해 가야 한다.
개발 과정에서
이러한 과정의 중요성을 인식하고,
예외에 대한 다양한 우회로를 만들어 놓는다면?
사용자는
보다 안정적이고 신회감 가는 사용 경험을 가질 수 있으며,
개발자도
유지보수 과정이 보다 수월할 수 있을 것이다.
그렇다면
이렇듯 중요한 예외처리에 사용되는 액티비티는?
2. 예외처리 관련 액티비티
1) Try Catch
(1) 실행 과정
Try 부분을 실행한다.
▼
[오류 발생 시에만 Catches 부분의
해당되는 오류 유형에 지정된 액티비티를 수행한다.]
▼
Finally를 수행한다.
(2) 유의사항
* Catches 부분이 핵심이다. 이곳에서 <Try에서 발생한 예외>의 유형을 예상하고 그 유형에 따라 수행할 작업을 설계해주어야 한다.
* 중요한 것은 Finally는 Try 또는 Catches 실행 여부와 상관 없이 무조건 실행된다는 것이다. 이 부분은 클릭해 들어가지 않는 이상 default는 접혀져 있기 때문에 전체 코드 리뷰 시 놓칠 가능성이 농후하다.
* 따라서 Finally 부분은 비워두는 것을 기본으로 한다.
(3) 예외 유형 - - System.Exception...
* 일반적인 UiPath 예외 형식은 다음과 같다.
- System.Exception: 모든 예외의 기본 클래스. 모든 예외 유형은 이 클래스에서 파생.
- UiPath.Core.ElementNotFoundException: 웹 페이지에서 특정 요소를 찾을 수 없을 때 발생하는 예외.
- System.IO.IOException: 파일 또는 디렉토리와 관련된 작업 중 오류가 발생한 경우 발생하는 예외.
- System.Net.Http.HttpRequestException: HTTP 요청 중 오류가 발생한 경우 사용할 수 있는 예외.
- UiPath.Core.SelectorNotFoundException: 지정된 Selector를 찾을 수 없을 때 발생하는 예외.
- UiPath.Core.Activities.TimeoutException: 작업이 주어진 시간 내에 완료되지 않은 경우 발생하는 예외.
- UiPath.Core.InvokeWorkflowException: 다른 워크플로우를 호출할 때 발생하는 예외.
- UiPath.Excel.ExcelException: Excel 파일과 관련된 작업 중 오류가 발생한 경우 발생하는 예외.
- UiPath.Core.ImageOperationException: 이미지 기반의 작업 중 오류가 발생한 경우 사용하는 예외.
- UiPath.Core.UIAutomationException: UI 자동화 작업 중 다양한 문제로 인해 발생하는 예외.
2) Element Exists
* Element Exists 액티비티는 지정한 요소가 존재하면 True를, 존재하지 않으면 False를 반환한다.
* 속성에서 요소를 찾는 시간을 지정할 수 있는데, 타겟 - 시간제한 에서 밀리초 단위로 지정하면 된다.(1000밀리초 = 1초)
* Element Exists가 반환한 Boolean값을 Boolean 타입의 변수에 담아 If문의 조건으로 사용하기도 한다.
3) Retry Scope
* Retry Scope는 조건이 만족될 때까지 '액션' 부분을 실행하도록 한다.
* 하지만 아래와 같이 '조건' 없이도 반복을 하게 하는 방법이 있다. 바로 '오류'를 이용하는 것이다.
* 조건이 비어 있을 경우, 액션에서 오류 발생 시 재시도 수행**
=> 액션 부분에 Throw 액티비티를 추가, 강제적으로 오류를 발생시켜 원하는 횟수 만큼 반복하도록 지정도 가능!!!
* 단, Retry Scope 속성으로 정해둔 횟수만큼 시도했음에도 조건이 만족되지 않는다면, 별다른 오류를 발생시키지 않고 Retry Scope를 빠져나간다.
* 속성 패널에서 '인터벌 다시 시도' 를 적절히 조정하여 재시도의 시간 간격을 조절, '재시도 횟수'를 n번 지정 가능
* 단, 조건이 Retry Scope 액티비티 이전 단계에서 '조건'이 True이더라도 무조건 첫 '실행'은 이루어진다.
-> 즉, 찾는 요소가 있을 때까지 Page Down을 하는 경우이미 찾는 요소가 존재하여 조건이 True 임에도 불구하고 Page Down을 하게 된다.
3. 사용한 액티비티 정리
1) Flow Decision : Flowchart 내서 사용할 수 있다. Sequence 내에서는 사용 X, 주로 Boolean형 타입 관련 액티비티와 쓰인다. (If, Element Exists 등등...)
* 예외 처리 액티비티들 ---------------------------------------
2) Try Catch :
- Try 부분을 먼저 실행, 오류가 발생할 경우 Catches로 이동.
- Catches에 지정된 오류의 형식이 있다면, 그 형식에서 미리 정해둔 액션을 실행한다.
- 오류의 형식에 구애받지 않고 진행하고 싶다면 모든 예외를 잡아주는 System.Exception을 넣어준다.
3) Element Exists : 지정한 요소를 찾고 지정된 시간(기본은 30초, 조정 가능) 동안 찾지 못하면 False를 반환
4) Retry Scope : 지정한 조건이 충족될 때까지 같은 작업을 수행하게 한다. 일례로, 찾는 요소가 있을 때[Element Exists => True] 까지 Scroll Down을 반복하게할 수 있다.
5) Throw : 강제로 오류를 발생시킨다. 경우에 따라 Retry Scope 등에서 반복을 위한 장치로 쓰이기도 한다.
=> New 다음에 발생시키고 싶은 오류를 적어준다. 예) New System.NullReferenceException
'IT > RPA' 카테고리의 다른 글
[RPA][🌟] #10 UiPath 변수(Variable) 와 인수(Argument) 총정리 (3) | 2024.01.31 |
---|---|
[RPA][🌟] #9 UiPath WorkFlow, Invoke WorkFlow, Library (0) | 2024.01.29 |
[RPA] #6-2 UiPath 엑셀(Excel) & 데이터테이블 Lookup Data Table (1) | 2024.01.23 |
[RPA] #7 UiPath 디버깅(Debugging) 하는 법 (0) | 2024.01.22 |
[RPA] #6-1 UiPath 엑셀(Excel) & 데이터테이블 추출, 필터링 및 가공하기 (0) | 2024.01.20 |