2017-09-20 4 views
0

for-loops에서 발생한 오류를 해결하는 개념에 대해 알게되었습니다. 로컬 컴퓨터에서 읽은 파일 목록이 있으며 팬더 데이터 프레임으로 읽으 려합니다.Python : Try, Continue, for 문에서 for 문을 제외하십시오.

파일의 목록과 각 파일의 열을 "A", "B"및 "C"로 가정 해 봅시다. 특정 열이있는 경우 내 컴퓨터의 파일에서 누락 된 file3.tbl의 열 "B"를 사용하여 for 루프를 계속하고 싶습니다. 그것은 그것에 대해 한 번만 인쇄 얻을 수있는 방법이 있나요

Column B not included in file: file3.tbl 
Column B not included in file: file3.tbl 
Column B not included in file: file3.tbl 

:

list = ['file1.tbl', 'file2.tbl', 'file3.tbl'] 
for i in range(len(list)): 
    data = pandas.read_csv(list[i]) 
    try: 
     b = data['B'] 
     continue 
    except Exception: 
     print "Column B not included in file: ", list[i] 

이 다소 작동하는 것 같다 그러나 그것은과 같이, 시대의 한 Statment 렌을 제외하고 (목록) 번호를 인쇄 특정 반복?

+0

는 [I]'대신'목록 [II]'의'목록을 의미합니까? 또한 들여 쓰기는'try' 블록에서 해제됩니다. –

+0

예, 있습니다! 나는 그 두 가지를 모두 편집 할 것이다. –

+5

'예외 제외'를하지 마십시오. 그것은 당신이 오히려 알게 될 것들을 숨길 가능성이 있습니다. 'except KeyError'가 더 구체적 일 것입니다. 또한 이것이 실제로 귀하의 코드라고 확신합니까? 목록에'.tbl' 만 있으면'.dat'가 출력되는 것이 이상합니다. – Ryan

답변

1

주석에 암시되어 있듯이 네임 스페이스 문제가있을 가능성이 큽니다. 다음은 각 Exception에 대해 고유하게 인쇄해야하는 정리 된 코드입니다. 그것은 의견에 동의하는 Pythonic 제안을 포함합니다. 세 CSV와 같은 파일 "file1.tbl", "file2.tbl", "file3.tbl"를 들어

, 나는 다음과 같은 얻을 :

import pandas as pd 


filenames = ["file1.tbl", "file2.tbl", "file3.tbl"]  # @John Gordon 
for fn in filenames: 
    data = pd.read_csv(fn) 
    try: 
     b = data['B'] 
    except (KeyError):          # @Ryan 
     print("Column B not included in file: ", fn) 
    else: 
     # Do something with b (optional) 
     pass 


# Column B not included in file: file1.tbl 
# Column B not included in file: file2.tbl 
# Column B not included in file: file3.tbl 
+0

안녕 pylang, 제안을 멋지게 요약 해 주셔서 감사합니다. else 문은 로직의 일부를 제외하고 계속 수행 할 것인가? 아니면 try 문이 중단 된 곳을 선택하겠습니까? 아니면 루프의 시작 부분에서 시작하겠습니까? –

+1

@DaxFeliz : else 문은 예외가 발생하지 않는 경우에만 실행됩니다. – Arun

+1

@Arun이 언급했듯이 예외가 없다면'try' 블록에서 계속됩니다. – pylang