【问题标题】:Updating Python 2.7 to 3.9 try: from cStringIO import StringIO except: from StringIO import StringIO将 Python 2.7 更新到 3.9 尝试:从 cStringIO 导入 StringIO 除外:从 StringIO 导入 StringIO
【发布时间】:2021-11-19 21:42:06
【问题描述】:

我继承了 Python 2.7 中的一个项目,该项目需要更新以与 Python 3.9 兼容,因为 AWS Lambda 已弃用对 Py 2.7 的支持

需要更新到3.9的代码:

try:
    from cStringIO import StringIO
except:
    from StringIO import StringIO

在 AWS Cloudwatch 中,我通常会收到“无法导入模块”错误,我认为可能是因为这行代码。

选项 1:我是否应该修改代码使其显示为:

try:
    from io import StringIO
except:
    from io import StringIO

选项 2:我是否应该修改代码使其显示为:

try:
    from io import StringIO
except ImportError:
    from cStringIO import StringIO

【问题讨论】:

  • 对于 Python 3.x,它应该是 from io import StringIO
  • 我是否应该修改代码使其显示为:try: from io import StringIO except: from io import StringIO
  • 或多或少,但最好避免裸露的except: 语句,所以我建议使用像except ImportError: 这样的特定语句
  • 我可以尝试类似try: from io import StringIO except: ImportError:
  • from cStringIO import StringIO 后面应该有一个 except ImportError: 行。

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


【解决方案1】:

在 Python 3 中你唯一需要的是

from io import StringIO

io 模块替换了 Python 2 中的 StringIOcStringIO 模块。

【讨论】:

    【解决方案2】:

    来自用户@chepner: “在 Python 2 中,人们会尝试导入较快的 cStringIO 模块,如有必要,会退回到较慢的纯 Python 模块。在 Python 3 中,只有一个面向用户的 io 模块。如果第一次导入失败,它也会第二次失败。(如果确实失败了,那是你的 Python 安装的问题,超出了你的脚本处理范围。)"

    我的最终代码将读取

    from io import StringIO
    

    【讨论】:

      猜你喜欢
      • 2015-08-03
      • 2013-08-15
      • 2016-03-20
      • 2023-04-11
      • 2019-09-30
      • 1970-01-01
      • 2011-06-08
      • 2012-12-06
      • 2019-11-27
      相关资源
      最近更新 更多