2014-12-23 2 views
2

나는 전에 파이썬을 사용 해본 적이 없으며 총 n00b이지만 Boto 라이브러리와 Python 3을 사용하여 Windows에서 py로 스크립트를 실행하려고합니다. .주문할 수없는 유형 : NoneType()> str()

latest_date = None 
    for key in bucket.list(prefix="meta-review/"): 
     done_file_match = re.match("^meta-review/([^/]+)/done$", key.key) 
     if done_file_match: 
      date = done_file_match.group(1) 
      latest_date = max(date, latest_date) 

    assert latest_date is not None, "No complete dump folder found!" 

하지만 난 출력으로이 오류 메시지가 명령 행 사용하여 스크립트를 실행할 때 : (

INFO:root:Connecting to Amazon S3 
INFO:root:Looking for latest complete dump 
Traceback (most recent call last): 
    File "*******.py", line 78, in <module> 
    download_latest(aws_access_key, aws_secret_key, args.dest_folder) 
    File "*******.py", line 41, in download_latest 
    latest_date = max(date, latest_date) 
TypeError: unorderable types: NoneType() > str() 

을 분명히 별표 개인 정보 보호위한 이 오류를 생성하는 스크립트의 일부입니다). 해결책을 어디서 찾을 수 있습니까? 비슷한 오류가 이미보고되었지만 변경해야 할 사항을 이해하지 못한다고 언급했습니다.

아이디어가 있으십니까? 다른 사람이 언급 한 바와 같이 max가 작동하지 않을 수

+0

'None '과'str'을 비교할 수 없습니다. 'max()'는 비교를 수행합니다. 그게 다야. – glglgl

+2

사실, 파일 이름에 대해 비공개가 될 수있는 것은 무엇입니까? – glglgl

+2

이것은'assert'의 오용입니다 –

답변

4

처음 latest_dateNone입니다.

그래서, 비교주의 마십시오

latest_date = date if latest_date is None else max(date, latest_date) 

latest_date = max(date, latest_date) 

을 변경하는 것은 그래서 그 문자열 '20141223 '등 예컨대, 제대로 비교 날짜 형식으로 더 나은했다 문자열 사이에있다.

+0

저는이 방법으로 해왔고 이제는 작동합니다! 알렉스 고마워! –

0

당신은 두 가지 유형 (없음 및 문자열)을 비교하는 최대()을 요구하고는

1

파이썬 2에서는 문자열을 None과 비교할 수 있었지만 파이썬 3에서는 변경되었습니다 (자세한 내용은 What’s New In Python 3.0: Ordering Comparisons 참조).

latest_date = "" 
... 

     latest_date = max(date, latest_date) 

assert len(latest_date), "No complete dump folder found!" 
:

문제를 해결하는 가장 간단한 방법은 (항상 비어 있지 않은 문자열 이하로 비교되는) 빈 문자열로 latest_date를 초기화 한 다음 어설 션 문에서 길이 테스트를하는 것입니다

+0

그것도 작동하며, 내 제안 된'if/else' 표현식보다 (더 명확하지는 않지만) 더 잘 읽을 수 있습니다. –

관련 문제