Python 파이썬 처음부터 다시 실행하는 방법. (goto)
페이지 정보
본문
안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 매크로에는 [ 액션 이동(goto) ], [ 액션 반복(for, foreach) ]을 비롯한 옵션에서 전체 반복을 사용할 수 있습니다. 아래 그림처럼 반복 횟수를 10으로 입력하면 매크로가 전체 10번 수행됩니다. 무한 반복하려면 0 또는 -1을 입력하세요.
우선, 파이썬에서는 goto를 사용할 수 없습니다. 전체 파이썬 프로그램을 반복하려면 루틴을 이동해야 하는데요. 이 때 쉽게 사용할 수 있는 명령문이 goto입니다. 그런데, 조금만 검색해보면 대부분의 언어가 goto를 지원하지만 파이썬은 안된다는걸 알 수 있습니다. 왜 파이썬(Python)만 지원하지 않을까요? 일반적으로 이런 명령문은 조직화되지 않은 코드를 생산하게 됩니다. 그러다보니 스파게티 코드가 되고, 더이상 유지보수를 할 수 없는 지경에 이르게 됩니다. 더 큰 문제는 담당자가 퇴사하거나 다른 부서로 가게 된다면 후임자는 엄청난 고통을 받게 될겁니다. 흐름을 이해하기 어렵고 역추적하는데 어려움을 겪기 때문입니다.
참고로, 대부분의 언어가 goto를 사용할 수 있도록 허용하지만~ 권장하지는 않습니다. 조건(if~else, switch~case) 표현식과 예외 및 반복기를 사용하여 구조화된 프로그래밍이 가능하기 때문입니다. 엔지엠 매크로는 반복적인 업무를 쉬지않고 수행해야 하는 태생적인 목표가 있습니다. 그렇다보니~ 액션 이동이나 액션 반복을 통해 전체 루틴을 쉽고 빠르게 반복할 수 있도록 해줍니다. 아래 그림과 같이 프로세스 흐름도를 확인할 수 있습니다.
권장되는 코딩 방식은 아니지만, 예외를 사용해서 goto를 구현할 수 있습니다. 강제로 예외를 발생시켜서 중첩된 제어 구조에서 빠져나오게 만들면 됩니다.
class gotolabel(Exception): print("from the goto label") # declare a label
try:
x=4
if (x 〉0): raise gotolabel() # goto the label named "gotolabel"
except gotolabel: # where to goto the label named "gotolabel"
pass
또 다른 방법은 break와 continue 명령문과 함께 루프를 사용해서 처리할 수 있습니다. continue문은 프로세스가 루프의 다음 반복으로 이동하여 무한으로 반복하게 합니다. 하지만 break는 루프문을 탈출하므로 반복이 종료됩니다. 여기서, 일정 횟수만큼 반복하려면 조건(if~else)으로 숫자를 증가시켜서 비교할 수 있습니다.
prompt = "Roll the dice "
while True:
try:
y = int(input(prompt))
except ValueError:
print ("Please enter a valid number")
continue
if y 〉6:
prompt = "The dice has numbers 1-6 ! Input a number〈 6"
elif y〈 1:
prompt = "The dice has numbers 1-6 ! Input a number 〉1"
else:
print("Correct!")
break
대부분의 언어들이 goto 명령문을 사용할 수 있게 허용하고 있습니다. 하지만, 권장한다는건 아닙니다. 파이썬도 goto 명령문을 사용할 수 있게 허용해주고, 개발자가 알아서 판단하게 했으면 좋았을텐데요. 아쉽게도 약간 예외적인 방식으로 처리해야 하는 불편함이 있습니다. 그래도 뭐 크게 어려운 부분은 아니라서 큰 문제는 아닙니다. 무한으로 반복하는 while문 안에 실행해야 할 매크로 코드를 전부 넣어두면 되기 때문입니다. 이보다 더 좋은 방법이 있으면~ 댓글로 남겨주세요^^
개발자에게 후원하기
추천, 구독, 홍보 꼭~ 부탁드립니다.
여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~
감사합니다~
- 이전글오토핫키(Autohotkey)에서 자주 사용하는 명령어 모음. 22.10.09
- 다음글Error 'OpenCvSharp.Internal.NativeMethods'의 형식 이니셜라이저에서 예외를 Throw했습니다. 22.10.08
댓글목록
등록된 댓글이 없습니다.