teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正

2021/09/15 14:34

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,40 @@
1
+ 対策
2
+ ---
3
+ まだ途中ですが、読み込んだ時にYAMLのFLOATでINFの時に、何行目かを出せるとこまで来ました。
4
+ あとはその行数の時に力業で値をSTRINGに差し替えればいけそうな気がします。
5
+
6
+ ```YAML
7
+ hoge: 1e1000
8
+ hoge1: 1e2
9
+ ```
10
+
11
+ ```Python3
12
+ from ruamel.yaml import YAML
13
+ import ruamel.yaml
14
+ yaml = YAML()
15
+
16
+ with open("example_in.yaml", 'rt') as f:
17
+ data = yaml.load(f)
18
+
19
+ # print(data)
20
+ # ordereddict([('hoge', inf)])
21
+
22
+ for i,d in enumerate(data):
23
+ if (type(data[d]) == ruamel.yaml.scalarfloat.ScalarFloat) and (str(data[d]) == "inf"):
24
+ print("[INF DETECTED!] Line:",i, "INDEDX:",d)
25
+ else:
26
+ print(d,data[d])
27
+
28
+
29
+ # with open("example_out.yaml", 'w') as f:
30
+ # yaml.dump(data, f)
31
+
32
+ ```
33
+
34
+
35
+
36
+ 駄目な投稿
37
+ ---
1
38
  > yamlファイルをloadする際、inf判定の代わりに文字列へ変換する
2
39
 
3
40
  `"yaml.load" infinity`と探していたら[偶然見つかりました](https://stackoverflow.com/questions/30458977/yaml-loads-5e-6-as-string-and-not-a-number)。