我之前从未使用过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()
(显然星号是为了隐私)。 谁能告诉我在哪里可以找到解决方案? 我注意到已经报告了类似的错误,但我不知道要改变什么。
有什么想法吗?
答案 0 :(得分:4)
最初latest_date
为None
,因此其他提及的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()比较两种不同的类型(无和字符串)