类'list'没有定义'__mod__',因此不能使用'%'运算符

时间:2014-09-25 14:57:52

标签: python fabric

我需要在Fabric任务中动态设置主机env。

我试过这个:

env.hosts = ['%s'] % server_ip_var

但是我收到了这个错误:

  

“班级列表”未定义“ mod ”,因此“%”运算符不能   在其实例中使用较少...

     

此检查会检测应解决但不能解析的名称。由于   动态调度和鸭子打字,这是有限的但可能   有用的案件数量。支持顶级和类级别的项目   比实例项更好。

2 个答案:

答案 0 :(得分:1)

有点不清楚你在问什么,但是可以通过各种方式将对象转换为字符串。如果您的变量可以转换为字符串,则可以使用str()函数:

env.hosts = [str(server_ip_var)]

另一种(更好)的方法是使用Format String Syntax

env.hosts = ["{}".format(server_ip_var)]

答案 1 :(得分:1)

如果你真的想这样做,你可以继承list

class FormattableList(list):
    def __mod__(self, *args, **kwargs):
        return list(x.__mod__(*args, **kwargs) for x in self)


print(FormattableList(['a: %s', 'b: %s']) % 123)