unorderable类型:NoneType()> STR()

时间:2014-12-23 18:03:26

标签: python

我之前从未使用过Python,而且我总是在n00b,但是我正在尝试使用Boto库和Python 3. *在Windows上执行py脚本。 这是生成错误的脚本的一部分:

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()

(显然星号是为了隐私)。 谁能告诉我在哪里可以找到解决方案? 我注意到已经报告了类似的错误,但我不知道要改变什么。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

最初latest_dateNone,因此其他提及的max无效。

所以,改变

latest_date = max(date, latest_date)

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

请注意比较是在字符串之间进行的,因此这些字符串最好采用适当的日期格式,例如'20141223'等。

答案 1 :(得分:2)

使用Python2,可以将字符串与None进行比较,但在Python3中进行了更改(有关详细信息,请参阅What’s New In Python 3.0: Ordering Comparisons)。

解决问题的最简单方法是将latest_date初始化为空字符串(它总是比任何非空字符串都要小),然后在断言语句中进行长度测试:

latest_date = ""
...

        latest_date = max(date, latest_date)

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

答案 2 :(得分:0)

您要求max()比较两种不同的类型(无和字符串)