类型错误:不能连接'str'和'int'对象(Inraster.Append)

0 投票
4 回答
1437 浏览
提问于 2025-04-18 01:24

下午好。

我在Python的世界里就像被扔进狼群一样;新工作给了我一些脚本,让我根据不同的数据集来调整它们。

这是我修改过的代码:

#import arcpy module
import arcpy
arcpy.env.overwriteOutput = True
arcpy.env.workspace = "D:\\XXXXX_ET_data"

#Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

#Local variable:
Inpoints = "D:\\XXXXX_ET_data\\XXX_priority_locations_03112014Copy.shp"
fdata = "01,02,03,04,05,06,07,08,09,10,11,12,13"
fdata = fdata.split(",")

#initalizing the list
Inraster = []

#build list of inputs
for month in range (01, 13):
    for line in fdata:
        date = str(line+(month))
        Inraster1 = ["ma"+date+".modis.tif", date]
        Inraster.append(Inraster1)

#Process: Extract Multi Values to Points
arcpy.sa.ExtractMultiValuesToPoints(Inpoints, Inraster, "NONE")
arcpy.gp.ExtractMultiValuesToPoints_sa(Inpoints, Inraster, "NONE")

我知道我的错误出在line 21: date = str(line+(month))这一行,所以我想知道该怎么修复这个问题;提前谢谢你们!

4 个回答

0

使用格式化字符串

date_str = "{0}{1}".format(line,month)
0
for line in fdata:
    date = str(line+(month))
    Inraster1 = ["ma"+date+".modis.tif", date]
    Inraster.append(Inraster1)
ext = str(month) + ".modis.tif"
Inraster = ['{}{}{}'.format("ma", line, ext) for line in fdata]

更符合Python风格的做法是:

2

在Python中,+这个符号可以用来连接字符串,也可以用来加整数(int)和浮点数(float)。

这一行代码:

date = str(line+(month))

出错的原因是:

line+(month)

它试图把一个字符串和一个整数作为+的操作数。如果你想连接字符串,就应该使用:

line+str(month)

这样做会先把整数month转换成字符串,然后再进行字符串的连接。

完整的代码行变成:

date = line+str(month)    

最外面的str()其实是多余的,因为右边的部分已经是字符串了。

2

month 是一个整数(int)。在把它和 line 连接之前,先把它转换成字符串(str)。

date = str(line+str(month))

这样做就能解决错误了。不过我不太确定这样做是否符合程序的逻辑,因为我不知道预期的输出是什么。

撰写回答