繁体   English   中英

Python 打印字符串时出现 KeyError

[英]Python KeyError when printing a string

我正在尝试通过 Python 中的标准输出打印一个字符串,然后通过 NodeJS 中的子进程获取该字符串。 我的代码如下:

sys.stdout.write('{r: {0}, g: {1}, b: {2}, brightness: {3}}'.format(int(result_color.color[0]), int(result_color.color[1]), int(result_color.color[2]), int(current_brightness)))
sys.stdout.flush()

但由于某种原因,我收到以下错误:

Traceback (most recent call last):
  File "C:\..\script.py", line 811, in <module>
    main(sys.argv[1:])
  File "C:\..\script.py", line 756, in main
    sys.stdout.write('{r: {0}, g: {1}, b: {2}, brightness: {3}}'.format(int(result_color.color[0]), int(result_color.color[1]), int(result_color.color[2]), int(current_brightness)))
KeyError: 'r'

我可以用“'”包围键,但是通过 JS 使用JSON.parse()的格式不正确。 为什么它会表现出这种行为? 当我传递打印字符串时,它想不出它试图将其作为字典处理的原因。 (我想通过 Python 和 Object 将其作为字符串处理,一旦在 JS 中收到。Python 的结尾不应涉及字典)

{}是字符串模板中的关键字符,您必须使用{{}}对其进行转义,尝试

sys.stdout.write('{{r: {0}, g: {1}, b: {2}, brightness: {3}}}'.format(int(result_color.color[0]), int(result_color.color[1]), int(result_color.color[2]), int(current_brightness)))

您可以在此处找到更多信息: https://docs.python.org/3/library/string.html#format-string-syntax

如果您使用 Python 3.x 可以使用 f-string 进行格式化,我认为它更具可读性

import sys;

class Color:
  def __init__(self, rgb, brightness):
    self.color = rgb
    self.brightness = brightness;

result_color = Color([11,22,33], 100)    

def show_color(color, brightness):
  [r,g,b] = color;
  sys.stdout.write(f'r: {r}, g: {g}, b: {b}, brightness: {brightness}\n')
  sys.stdout.flush()

show_color(result_color.color, result_color.brightness)

这是我评论的扩展版本。 它使用内置的json模块。 我还缩短了代码,使其看起来更整洁,并且不会重复太多。

import sys
import json

...

r, g, b = map(int, result_color.color)
data = dict(r=r, g=g, b=b)

sys.stdout.write(json.dumps(data))
sys.stdout.flush()

另外,我建议您使用普通print function。 如果您需要在末尾没有换行符并且想要刷新它,则两者都是您可以指定的参数。

print(json.dumps(data), end="", flush=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM