파이썬 if 구문 내 변수 선언
글쓴이: gksrb500 / 작성시간: 토, 2023/02/04 - 9:32오후
안녕하세요.
갑작스러운 노가다 프로젝트 때문에 이번에 코딩을 'trial and error' 방식으로 공부하고 있는 학생입니다.
제가 하고자 하는 것은 a="파일 1", b="파일 2", c="파일 3" 이렇게 파일에 대해서 변수를 선언하고자 합니다.
파일 1: 파일명에 rcp라는 단어를 반드시 포함하는 .xlsx 파일
파일 2: 파일명에 PM이라는 단어를 반드시 포함하는 확장자 없는 파일
파일 3: 랜덤한 이름으로 생성되는 .xlsx 파일
이 논리를 이용해서 if 구문으로 변수 선언을 하고, if 구문 이후에 변수를 사용하려고 했습니다.
(일부분을 잘라서 왔습니다.)
for i in folder_num: fpath_2 = fpath + '\\' + i flist = os.listdir(fpath_2) print(flist) for s in flist: if 'rcp' in s: rcp_file = fpath_2 + '\\' + s elif 'PM06' in s: log_file = fpath_2 + '\\' + s else: detect_file = fpath_2 + '\\' + s print(rcp_file) print(log_file) print(detect_file)
우선 제가 해본 것은 이렇게 했는데 log_file 변수가 정의되지 않았다고 나왔습니다. 제 질문은
1. 파일명에 rcp가 포함된 파일은 rcp_file, PM06이 포함된 파일은 log_file, 그 외에는 detect_file 이런 식으로 코딩을 했다고 생각했는데 왜 log_file부터는 정의가 안됐다고 나오는지 궁금합니다.
2. 그럼 이 방식으로 해결하려면 어떻게 수정해야 할까요? (파이썬 및 코딩을 이해하면서 공부하고자 질문드립니다.)
-------print 함수를 if-elif-else 사이사이에 껴 놓으면 제가 원하는 대로 나옵니다.
3. 쌩초보라서 간단하게 할 수 있는 코딩을 어렵고 길게 가려고 하는 것 같은데, 혹시 더 좋은 코드가 있을까요?
Forums:
우선 rcp 파일, PM06 파일, 기타 파일 순으로
우선 rcp 파일, PM06 파일, 기타 파일 순으로 읽혀진다고 봐야 겠네요.
print(rcp_file)
print(log_file)
print(detect_file)
가 호출되면 처음에 rcp_file에 값이 assign되면서 rcp_file 객체가 생성되었을 겁니다. 그래서 print(rcp_file)은 잘 찍힐 거예요.
그다음에 print(log_file)은 log_file 자체 객체가 없기 때문에 python interpreter가 오류가 나면서 실제로 종료가 될 겁니다.
해결책은 1) rcp_file = "", log_file = "", detect_file = "" 식으로 맨 위에 초기화를 하거나, 2) 3개 프린트 문을 for loop 밖으로 빼는 겁니다.
전체적인 코드는 보기 좋습니다. 누가 뭐라고 하던 try and error로 하는게 잘 하시는 겁니다. 그게 제일 실력 향상에 도움이 될 겁니다.
답변 진심으로 감사드립니다.
답변 진심으로 감사드립니다.
print(rcp_file), print(log_file), print(detect_file)이 같은 if 구문 안에 속해 있는데(tab) rcp_file만 객체가 형성되는지 이해가 가지 않습니다...
우선 말씀해주신대로 맨 위에 rcp_file="", log_file="", detect_file="" 를 위에 넣어 초기화했더니 잘 됩니다.
미리 변수에 텅빈 객체를 지정해주고 난 후, if 조건문으로 다시 변수 지정을 해주면 되지만, 텅 빈 객체를 지정을 안해줬을 시에 왜 안되는지 이유가 궁금합니다!
이해를 하지 않고 넘어가면 다음에도 같은 실수를 반복할 것 같습니다!
다시 한번 답변 감사드립니다
if-elif-else 중 하나만 실행됨으로
if-elif-else 중 하나만 실행됨으로 (처음에는 rcp_file에 할당이 이루어짐) 다른 log, detect 는 할당이 안이루어 지죠.
그후 3개 연속 print()에서 첫번째만 rcp_file 객체가 있기에 출력되고, 나머지 print()는 log, detect의 할당이 안이루어져서 객체 자체가 생성되지 않았음으로 fail나서 전체 소프트웨어가 종료되는 겁니다.
결과적으로는 소프트웨어가 실행중에 fail나서 그런거예요. 그래서 elif-else 문장이 돌지 않는거죠.
아 이해했습니다!
아 이해했습니다!
기존에는 bash로 단순 노가다 작업을 진행했다가, unix 환경이 아닌 곳에서 코드가 필요해져서 파이썬을 배우고 있는데 생각보다 문법이 많이 다르네요.
정말 감사드립니다!!!
댓글 달기