簡體   English   中英

ruamel.yaml八進制在1.1

[英]ruamel.yaml octal in 1.1

我試圖用PyYAML運行這段代碼:

from yaml import safe_load
data = safe_load("""\
%YAML 1.2
---
x: 42
y: 0x2a
z: 0o52
""")

assert data['x'] == data['y'] == data['z']

並且沒想到它會拋出一個斷言錯誤。 在我閱讀了更多文檔(通過http://yaml.org/找到)之后,我意識到PyYAML不久前已經死了,並且從未支持YAML 1.2規范中的八進制整數。

使用ruamel.yaml( from ruamel.yaml import safe_load ),上面的工作正常。

出於好奇,我嘗試使用舊的八進制格式ruamel.yaml(頂部為YAML 1.1z: 052 ),這也很有用。 我也試過以下:

from ruamel.yaml import safe_load
data = safe_load("""\
%YAML 1.1
---
x: 42
y: 0x2a
z: 0o52
""")
assert data['x'] == data['y'] == data['z']

期望它拋出一個錯誤,因為data['z']應該是一個字符串,而不是整數42.這不會引發錯誤,我猜它應該。

我的期望是錯誤的,還是ruamel.yaml中的錯誤?

是的,這是ruamel.yaml 0.14.2中的錯誤。

1.1和1.2整數的隱式解析器都包含0o模式,只有1.2的模式應該具有該模式。 舊模式(匹配052 )僅在要求版本1.1時可用。

這應該在ruamel.yaml> = 0.14.3中修復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM