这里的语法有什么问题?
print '#' * 25, 'IMPLEMENTATION FOR %s', '#' * 25 % initialize.ntw_device[index].hostname
以下是输出的一部分:
######################### IMPLEMENTATION FOR %s
line 11, in shift_off_confirm
print '#' * 25, 'IMPLEMENTATION FOR %s', '#' * 25 % initialize.ntw_device[index].hostname
TypeError: not all arguments converted during string formatting
答案 0 :(得分:0)
实际上问题出在print语句的第二部分。因为当你写作
'IMPLEMENTATION FOR %s', '#' * 25 % "test"
%s需要更换,但你不需要。所以它应该是这样的。
print '#' * 25, 'IMPLEMENTATION FOR %s %s' % ('#' * 25, initialize.ntw_device[index].hostname)
也许您应该考虑使用format
函数而不是%
s。
答案 1 :(得分:0)
%
运算符是字符串运算符,更类似于C的sprintf
而不是printf
。它不是print
语句的一部分。你写的是类似于
print '#' * 25,
print 'IMPLEMENTATION FOR %s',
print '#' * 25 % initialize.ntw_device[index].hostname
'#' # 25
中没有要填充的主机名的格式说明符,从而导致错误。你可以写
print '#' * 25, \
'IMPLEMENTATION FOR %s' % (initialize.ntw_device[index].hostname,) \
'#' * 25
或
print ('#' * 25 + 'IMPLEMENTATION FOR %s' + '#' * 25) % (initialize.ntw_device[index].hostname,)
总是使用显式元组而不是单个值作为右手参数被认为是一种好习惯,以防止RHA评估元组本身的可能性。