2017-12-08 2 views
2

문자열을 통과 할 때 파이썬 2에서 오류파이썬으로 기능 람다 및 필터 python2 코드를 다음과 같이 수정 3

for filename in sorted(glob.glob(self.path + '/test*.bmp'), 
           key=lambda f: int(filter(lambda x: x.isdigit(), f))): 

Error: 
Traceback (most recent call last): 
    File "/Users/ImageSegmentation/preprocess.py", line 53, in get_gland 
    key=lambda f: int((filter(lambda x: x.isdigit(), f)))): 
    File "/Users/ImageSegmentation/preprocess.py", line 53, in <lambda> 
    key=lambda f: int((filter(lambda x: x.isdigit(), f)))): 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'filter' 
+0

... 파이썬 2에서 제대로 작동 했나요? 같은 오류가 발생하는 것처럼 보이지만,''filter ''대신에''list ''를 사용하십시오. – glibdud

+1

@glibdud 아니요. 문자열을 전달할 때 문자열을 반환하는 데 필터가 사용 되었기 때문입니다. 그것은 좋은 기능이었고, 이제는 사라졌습니다. ... –

+0

@ Jean-FrançoisFabre 아, 문자열입니다. 감사. – glibdud

답변

1

를 가져 오는 동안 나는 python3.5에 다음 python2.7 코드를 변환해야 입력, filter 문자열을 반환하는 데 사용되는 편리했습니다.

이제 filter은 결과를 얻기 위해 반복해야하는 필터 객체를 반환합니다.

결과에 "".join()을 사용해야하므로 반복적으로 &을 문자열로 변환해야합니다.

또한 lambda x: x.isdigit()은 과도하고 과식하지 않으므로, str.isdigit을 직접 사용해주십시오.

코드의 또 다른 잠재적 인 버그는 f이 파일의 전체 경로 이름이므로 경로에 숫자가있는 경우 고려되므로 어려움이 될 수 있으므로 올바른 픽스는 다음과 같습니다.

int("".join(filter(str.isdigit, os.path.basename(f))))