簡體   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