【问题标题】:max() fails in python2 -> python3 conversion with `>` not supportedmax() 在 python2 中失败-> python3 转换不支持`>`
【发布时间】:2018-05-16 19:58:29
【问题描述】:

从 python 2.x -> python 3.x 转换时,我发现内置 max 函数的行为发生了这种变化。我没有发现它记录在任何关于迁移问题的标准位置。 https://eev.ee/blog/2016/07/31/python-faq-how-do-i-port-to-python-3/ http://python-future.org/compatible_idioms.html

我该如何解决这个问题?

Python 2.x:

In [1]: max([None, None, None])
In [2]: 

Python 3.x:

In [3]: max([None, None, None])
---------------------------------------------------------------------------
TypeError                                
Traceback (most recent call last) <ipython-input-3-f82c85b9875c> in <module>()
----> 1 max([None, None, None])

TypeError: '>' not supported between instances of 'NoneType' and 'NoneType'

【问题讨论】:

  • 我投票结束这个问题,因为它不是一个问题。
  • 我回答了我自己的“问题”(见下文),为了帮助他人,应该明确鼓励这个问题。
  • @Shankari:是的,回答你自己的问题是允许的,但我仍然没有在这篇文章的“问题”部分看到任何看起来像问题的东西。
  • @Shankari 以某种方式提出问题,因为有人可能会在此处或在 Google 中输入该问题以找到答案。

标签: python python-3.x python-2.7


【解决方案1】:

回答我自己的问题:没有向后兼容的max,但可以说尝试找到None 的最大值并没有真正的意义。

我比较的条目是时间戳,我知道它们永远不会是负数。所以我更改了我的代码以返回0 而不是None,所以max 变成了max([0,0,0]) 有效。

如果您无法对您的数据做出此类保证,则可以改为返回 -sys.maxsize

In [7]: max([-sys.maxsize, -sys.maxsize, -sys.maxsize])
Out[7]: -9223372036854775807

请注意 sys.maxsize 不是 sys.maxint,这是记录在案的更改。 What is sys.maxint in Python 3?

【讨论】:

    【解决方案2】:

    None 表示没有值 在 Python3 中显示错误消息,因为您没有在 NoneType 类型的参数列表中搜索最大的项目

    【讨论】:

      猜你喜欢
      • 2015-01-12
      • 2018-03-09
      • 2022-08-05
      • 1970-01-01
      • 2017-01-24
      • 2019-06-06
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多