[英]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.