【问题标题】:Python 2.6 compatibility for rundeckrunrundeckrun 的 Python 2.6 兼容性
【发布时间】:2015-01-03 11:04:25
【问题描述】:

我是 Python 新手,在编写一段代码时有些吃力。我正在使用 rundeckrun,它是 Rundeck API 的开源 python 客户端。客户端中有一段代码似乎被锁定到 python 2.7+,我真的需要让它在 Python 2.6 上工作。我试过搜索,但我什至不知道这个结构叫什么,很难找到它的 2.6 版本。

node_attr_keys = (
        'name',
        'hostname',
        'username',
        'description',
        'osArch',
        'osFamily',
        'osName',
        'editUrl',
        'remoteUrl',
    )

    data = {k: getattr(self, k)
            for k in node_attr_keys if getattr(self, k, None) is not None}

具体错误是:

文件“/usr/lib/python2.6/site-packages/rundeckrun-0.1.11-py2.6.egg/rundeck/client.py”,第 21 行,在 从 .api 导入 RundeckApiTolerant、RundeckApi、RundeckNode 文件“/usr/lib/python2.6/site-packages/rundeckrun-0.1.11-py2.6.egg/rundeck/api.py”,第 135 行 对于 node_attr_keys 中的 k 如果 getattr(self, k, None) 不是 None} ^ SyntaxError: 无效语法

【问题讨论】:

  • ^ 它被称为“字典理解”。希望这个其他问题有所帮助。
  • 感谢大家的快速回复!
  • 我在 rundeckrun 中没有正式支持 python 2.6。好吧,无论如何我都不测试它(显然)。如果您提交 github 问题或拉取请求,我会查看它。如果这是唯一的变化,应该很容易。希望没有其他地雷。

标签: python python-2.7 python-2.6 rundeck


【解决方案1】:

这是一个字典理解。 Python 2.6 不支持它们。你提供的代码大致相当于这段代码:

node_attr_keys = (
 # Same as your code, omitted for brevity
)
data = {}
for k in node_attr_keys:
    if getattr(self, k, None) is not None:
        data[k] = getattr(self, k)

【讨论】:

    【解决方案2】:

    正如 Kevin 指出的,这是一种字典理解。

    在 Python 2.6 中,您可以将其编写为生成元组(键/值对)列表的生成器表达式,并将其传递给 dict 构造函数:

    data = dict((k, getattr(self, k))
                 for k in node_attr_keys if getattr(self, k, None) is not None)
    

    【讨论】:

      【解决方案3】:

      除了这个错误,人们可能会因为同样的原因得到以下错误。

      File "/usr/lib/python2.6/site-packages/rundeck/transforms.py", line 256
      _transforms = {obj_key: obj_val for obj_key, obj_val in locals().items() if hasattr(obj_val, '__is_transform__')}
                                        ^
      

      SyntaxError: 无效语法

        File "/usr/lib/python2.6/site-packages/rundeck/util.py", line 22
      return {c.tag: c.text for c in el}
                              ^
      

      SyntaxError: 无效语法

      File "/usr/lib/python2.6/site-packages/rundeck/util.py", line 36
      return {k: v for k, v in el.items()}
                     ^
      

      SyntaxError: 无效语法

      File "/usr/lib/python2.6/site-packages/rundeck/util.py", line 58
      return {k: kwargs.pop(k) for k in api_keys if k in kwargs}
      

      您可能必须应用 kindall 给出的相同修复程序。分别修改如下文件即可。

      _transforms = dict((obj_key, obj_val) for obj_key, obj_val in locals().items() if hasattr(obj_val, '__is_transform__'))
       return dict((c.tag, c.text) for c in el)
      return dict((k, v) for k, v in el.items())
      return dict((k, kwargs.pop(k)) for k in api_keys if k in kwargs)
      

      感谢 kindall。

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 1970-01-01
        • 2019-06-04
        • 2010-11-04
        • 2010-09-14
        • 2018-06-02
        • 1970-01-01
        • 2020-02-27
        • 2022-11-14
        相关资源
        最近更新 更多