【问题标题】:*** ValueError: invalid literal for int() with base 10: '#'*** ValueError: int() 以 10 为底的无效文字:'#'
【发布时间】:2018-09-09 09:26:33
【问题描述】:

我想将我的颜色数组转换为 RGB 像素值。

颜色

array(['#32CD32', '#CD5C5C', '#00BFFF', '#1E90FF', '#00008B', '#ADFF2F',
       '#B0E0E6', '#7CFC00', '#00008B', '#1E90FF', '#F08080', '#F08080',
       '#FA8072', '#0000FF', '#7CFC00', '#B0E0E6'],
      dtype='<U7')

我尝试了什么?

pixel_color = ['#%02x%02x%02x' % (c[0], c[1], c[2]) for c in colors]

我收到以下错误:

***** TypeError: %x format: an integer is required, not str**

然后我做了以下事情:

pixel_color = ["#%02x%02x%02x" %(int(c[0]), int(c[1]), int(c[2])) for c in colors]

然后我得到以下错误:

***** ValueError: int() 以 10 为底的无效文字:'#'**

【问题讨论】:

  • 嗨@chrisz,谢谢你的评论我试过pixel_color = ["%02x%02x%02x" %(int(c[0]), int(c[1]), int (c[2])) for c in colors] 但是我得到相同的错误 ValueError: invalid literal for int() with base 10: '#'
  • 是的,因为您没有从输入中删除 #
  • colors= [c.strip('#') for c in colors] 返回 ['32CD32', 'CD5C5C', '00BFFF', '1E90FF', '00008B', 'ADFF2F' , 'B0E0E6', '7CFC00', '00008B', '1E90FF', 'F08080', 'F08080', 'FA8072', '0000FF', '7CFC00', 'B0E0E6'] 然后pixel_color = ["%02x%02x %02x" %(int(c[0]), int(c[1]), int(c[2])) for c in colors] *** ValueError: int() 以 10 为底的无效文字:' C
  • 我不确定您希望该代码做什么。

标签: python python-3.x syntax syntax-error typeerror


【解决方案1】:

在尝试转换之前,您不会从输入中删除 #。另外,你为什么不直接使用bytes.fromhex()

x = ['#32CD32', '#CD5C5C', '#00BFFF', '#1E90FF', '#00008B', '#ADFF2F',
'#B0E0E6', '#7CFC00', '#00008B', '#1E90FF', '#F08080', '#F08080',
'#FA8072', '#0000FF', '#7CFC00', '#B0E0E6']

for i in x:
  red, green, blue = bytes.fromhex(i[1:])
  print(red, green, blue)

输出:

50 205 50
205 92 92
0 191 255
30 144 255
0 0 139
173 255 47
176 224 230
124 252 0
0 0 139
30 144 255
240 128 128
240 128 128
250 128 114
0 0 255
124 252 0
176 224 230

【讨论】:

  • 太棒了,这就是我要找的。谢谢@chrisz
  • 警告:# 前缀表示后面是颜色代码,而不是十六进制数字。如果颜色字符串只有 3 个(附加)字符(短代码,非常常见),您应该扩展它。这应该在转换数字之前完成。
猜你喜欢
  • 2020-01-04
  • 2010-12-22
  • 2011-07-07
  • 2019-10-14
  • 2022-05-19
  • 2013-05-07
相关资源
最近更新 更多