Python TypeError:必须是str而不是int

Python TypeError:必须是str而不是int,python,string,floating-point,int,Python,String,Floating Point,Int,我使用此代码将字符串与浮点值连接起来: fr = channel.freqhz / 1000000 print ("fr type is", type(fr)) rx_channel = "<RxChannel>\n\ <IsDefault>1</IsDefault>\n\ <UsedForRX2>" + channel.usedforrx2 + "</UsedForRX2>\n\ <ChIndex>" + st

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

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"
fr=channel.freqhz/1000000
打印(“fr类型为”,类型(fr))
rx\u信道=”\n\
1\n\
“+channel.usedforrx2+”\n\
“+str(i)+”\n\
“+str(通道索引)+”\n\
“+channel.subband+”\n\
100\n\
“+str(fr)+”\n\
0\n\
5\n\
\n“
但我得到了这个错误信息:

> fr type is <class 'float'>                                         
> Traceback (most recent call last):                                    
> File "createRFRegion.py", line 260, in <module>                       
> write_rf_region(rf_region_file, rf_region_filename)                   
> File "createRFRegion.py", line 233, in write_rf_region                
> rf_region_file.write(create_rx_channel(channel, i))                   
> File "createRFRegion.py", line 164, in create_rx_channel              
> <Frequency>" + str(fr) + "</Frequency>\n\                             
> TypeError: must be str, not int
>fr类型为
>回溯(最近一次呼叫最后一次):
>文件“createRFRegion.py”,第260行,在
>写入区域(区域文件,区域文件名)
>文件“createRFRegion.py”,第233行,在write_rf_区域
>rf_region_file.write(创建_rx_通道(通道,i))
>文件“createRFRegion.py”,第164行,在create_rx_通道中
>“+str(fr)+”\n\
>TypeError:必须是str,而不是int
我不理解这个错误,因为我正在使用str()函数将浮点值转换为str。

只需在所有字段中使用
str()
。 Python不能很好地处理多行操作和错误,它将指向多行操作的最后一行(我假设它将最后一行中的所有字符串连接在一起,从而指向
str(fr)

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

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"
rx\u频道=“\n1\n”+
str(channel.usedforrx2)+“\n”+
str(i)+“\n”+
str(channel.index)+“\n”+
str(通道子带)+“\n100\n”+
str(fr)+“\n0\n5\n/RxChannel>\n”

频道的值是多少?用于x2和
频道。子带的值是多少?我怀疑其中一个是int而不是string。另外,为了使代码更可读,请考虑用以下语句替换该语句:
rx_channel = """<RxChannel>
  <IsDefault>1</IsDefault>
  <UsedForRX2>{}</UsedForRX2>
  <ChIndex>{}</ChIndex>
  <LC>{}</LC>
  <SB>{}</SB>
  <DTC>100</DTC>
  <Frequency>{}</Frequency>
  <MinDR>0</MinDR>
  <MaxDR>5</MaxDR>
</RxChannel>
""".format(channel.usedforrx2, i, channel.index, channel.subband, fr)
rx_频道=”“”
1.
{}
{}
{}
{}
100
{}
0
5.
“”格式(channel.usedforrx2,i,channel.index,channel.subband,fr)

太好了,刚刚试过你的代码,它是正确的。你在这方面遇到困难的确切原因是什么?这对我来说很有效,所以似乎还有其他原因。您可以发布更多的代码吗?错误必须来自代码中的其他地方
line=“”+str(6.7)+“\n”
没有给我任何错误。在
createRFRegion.py
文件中,第163、164和165行是什么?听起来像是输入错误,奇怪的是,您的错误消息显示的是
“+str(fr)+”\n
而不是
line=”“+str(fr)+”\n
。你确定你给我们看的代码就是你正在运行的代码吗?你是对的,我被一个事实误导了,那就是Python不能很好地处理多行操作和错误。我认为错误来自fr,而它来自usedforrx2,它不是str。