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