【问题标题】:unsupported format character?不支持的格式字符?
【发布时间】:2017-10-30 19:08:25
【问题描述】:

我有以下代码

import urllib.request

niveau_zoom_satellite = 0.0001389


def Image(coordinates, image_size, name):


    d1 = "http://eumetview.eumetsat.int/geoserv/wms?LAYERS=overlay%3Ane_10m_coastline%2Coverlay%3Ane_10m_admin_0_boundary_lines_land&STYLES=&TRANSPARENT=TRUE&FORMAT=image%2Fpng8&VERSION=1.3.0&TILED=true&EXCEPTIONS=INIMAGE&SERVICE=WMS&REQUEST=GetMap&CRS=EPSG%3A4326&BBOX=47.640001058578,3.520001411438,48.880001068115,4.7600014209747&WIDTH=256&HEIGHT=256" % \
               (niveau_zoom_satellite,
                coordinates[0],
                coordinates[1],
                image_size[0] / 2,
                image_size[1] / 2,
                image_size[0],
                image_size[1])
    for line in urllib.request.urlopen(d1):
        if line.startswith("<td align=left><input type=image src="):
            d2 = "http://http://eumetview.eumetsat.int/%s" % (line.split("\"")[1],)
            break
    urllib.request.urlretrieve(d2, name)


if __name__ == '__main__':
    Image((4.37337, 47.43572), (256, 256), "test.jpg")

问题是

ValueError:索引 58 处不支持的格式字符“A”(0x41)

【问题讨论】:

  • 哪一行引发了错误?
  • 哪一行?我怀疑您需要像以下问题一样转义字符串中的%stackoverflow.com/questions/8856523/…
  • 第 7 行的错误 (image_size[1]) ((((File "C:/Users/RIDHA/.PyCharmCE2017.1/config/scratches/33.py", 第 26 行,在 Image((4.37337, 47.43572), (256, 256), "test.jpg") 文件 "C:/Users/RIDHA/.PyCharmCE2017.1/config/scratches/33.py",第 17 行,在图像中 image_size[1])))

标签: python pycharm spyder


【解决方案1】:

它在 d1 定义中抱怨 %3An。最好在这里使用 str.format()。

例如:

d1 = "www.blabla.com/{var1}asdasd".format(var1=5)

将生成:

d1 = "www.blabla.com/5asdasd"

【讨论】:

    【解决方案2】:

    您使用 URL 作为% 运算符的格式字符串。但是,该 URL 包含多个编码为 %xx 的字符,其中 xx 是字符的十六进制代码(3A 代表冒号 :,2F 代表斜杠 /)。那些% 字符被解释为格式规范的开始。您应该通过将单个 % 替换为双 %% 来逃避它们以避免被 % 运算符解释,或者完全摆脱 % 运算符并改用 format 方法。

    顺便说一句,我在您的字符串中没有看到任何 实际 格式规范 - 您真正想要什么作为 d1 的值?

    编辑:所以我猜正确的代码是这样的:

    d1 = "http://eumetview.eumetsat.int/geoserv/wms?LAYERS=overlay%3Ane_10m_coastline%2Coverlay%3Ane_10m_admin_0_boundary_lines_land&STYLES=&TRANSPARENT=TRUE&FORMAT=image%2Fpng8&VERSION=1.3.0&TILED=true&EXCEPTIONS=INIMAGE&SERVICE=WMS&REQUEST=GetMap&CRS=EPSG%3A4326&BBOX={},{},{},{}&WIDTH={}&HEIGHT={}".format(
        coordinates[0],
        coordinates[1],
        image_size[0] / 2,
        image_size[1] / 2,
        image_size[0],
        image_size[1])
    

    我仍然不知道 niveau_zoom_satellite 适合这个。

    【讨论】:

    • 我只是不会下载卫星图像
    • 嗯,这个答案并没有真正让事情变得更清楚。你有一个 URL,你有一些变量 - niveau_zoom_satellitecoordinatesimage_size - 它们的值大概应该替换你的 URL 的某些部分。 哪些部分?我会假设image_size 包含的值应该分别在WIDTH=HEIGHT= 之后,但是其余的呢?
    • 好吧,每个变量都有一个数值,对于 image_size 是的,它们分别计算应该在 WIDTH= 和 HEIGHT= 之后的值,但之前的值是图像的坐标
    • thak uu 先生,您真的帮助我通过您的问题找到解决方案..非常感谢您
    • 你能给我你的电子邮件吗?
    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 2017-08-22
    • 2013-09-19
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    相关资源
    最近更新 更多