TypeError:必须是str而不是int

时间:2017-05-31 14:18:14

标签: python string floating-point int

我正在使用此代码将字符串与浮点值连接:

//Make an object
var object = new THREE.Mesh( new THREE.BoxGeometry(2,2,2), new THREE.MeshBasicMaterial() );
//Move the object
object.position.set(new THREE.Vector3(5,0,0);

//Create a matrix
var matrix = new THREE.Matrix4();
//Rotate the matrix
matrix.makeRotationY(Math.PI / 2);

//rotate the object using the matrix
object.position.applyMatrix4(matrix);

但我收到此错误消息:

fr = channel.freqhz / 1000000
print ("fr type is", type(fr))
rx_channel = "<RxChannel>\n\
  <IsDefault>1</IsDefault>\n\
  <UsedForRX2>" + channel.usedforrx2 + "</UsedForRX2>\n\
  <ChIndex>" + str(i) + "</ChIndex>\n\
  <LC>" + str(channel.index) + "</LC>\n\
  <SB>" + channel.subband + "</SB>\n\
  <DTC>100</DTC>\n\
  <Frequency>" + str(fr) + "</Frequency>\n\
  <MinDR>0</MinDR>\n\
  <MaxDR>5</MaxDR>\n\
</RxChannel>\n"

我不理解这个错误,因为我使用str()函数将float转换为str。

2 个答案:

答案 0 :(得分:4)

只需在所有字段中使用str()

Python不能很好地处理多行操作和错误,并且会指向多行操作的最后一行(我假设它将最后一行中的所有字符串连接在一起,因此指向在str(fr))。

字段fr甚至不是int,而是float,因此错误来自其他字段之一。我的猜测是channel.subband,一个频道的子带将是一个整数。

rx_channel = "<RxChannel>\n<IsDefault>1</IsDefault>\n<UsedForRX2>" + 
    str(channel.usedforrx2) + "</UsedForRX2>\n<ChIndex>" + 
    str(i) + "</ChIndex>\n<LC>" + 
    str(channel.index) + "</LC>\n<SB>" + 
    str(channel.subband) + "</SB>\n<DTC>100</DTC>\n<Frequency>" + 
    str(fr) + "</Frequency>\n<MinDR>0</MinDR>\n<MaxDR>5</MaxDR>\n/RxChannel>\n"

答案 1 :(得分:2)

while read i; do eval printf "$i%.s0" {1..$(wc -L /tmp/HEX | cut -d ' ' -f1)} | head -c $(wc -L /tmp/HEX | cut -d ' ' -f1); echo; done < /tmp/HEX channel.usedforrx2的值是多少?我怀疑其中一个是int而不是string。另外,为了使代码更具可读性,请考虑使用以下代码替换该语句:

channel.subband