print(yaml.dump(str("lol")))
lol
...
print(yaml.dump(tuple("lol")))
!!python/tuple
- l
- o
- l
print(yaml.dump(range(1,10)))
!!python/object/apply:builtins.range
- 1
- 10
- 1
튜플이 원시 데이터 유형이 아니므로 직렬화되었는지 확인하십시오. 범위(builtins에서 가져온)도 동일하게 처리되었습니다.
safe_load() 또는 **safe_load_all()**는 SafeLoader를 사용하며 클래스 객체 역직렬화를 지원하지 않습니다. 클래스 객체 역직렬화 예:
import yamlfrom yaml import UnsafeLoader, FullLoader, Loaderdata =b'!!python/object/apply:builtins.range [1, 10, 1]'print(yaml.load(data, Loader=UnsafeLoader))#range(1, 10)print(yaml.load(data, Loader=Loader))#range(1, 10)print(yaml.load_all(data))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.load_all(data, Loader=Loader))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.load_all(data, Loader=UnsafeLoader))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.load_all(data, Loader=FullLoader))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.unsafe_load(data))#range(1, 10)print(yaml.full_load_all(data))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.unsafe_load_all(data))#<generator object load_all at 0x7fc4c6d8f040>#The other ways to load data will through an error as they won't even attempt to#deserialize the python object
이전 코드는 직렬화된 파이썬 클래스를 로드하기 위해 unsafe_load를 사용했습니다. 이는 버전 >= 5.1에서 load()에 Loader가 지정되지 않거나 Loader=SafeLoader인 경우 직렬화된 파이썬 클래스나 클래스 속성을 역직렬화하는 것을 허용하지 않기 때문입니다.