将 'None' 字符串转换为 None 的 Pythonic 方式

标签 python yaml nonetype

假设我有以下 yaml 文件,第 4 行的值应该是 None。如何将字符串 'None' 转换为 None

CREDENTIALS:
  USERNAME: 'USERNAME'
  PASSWORD: 'PASSWORD'
LOG_FILE_PATH: None <----------

我已经有了这个:

config = yaml.safe_load(open(config_path, "r"))
username, password, log_file_path = (config['CREDENTIALS']['USERNAME'],
                                     config['CREDENTIALS']['PASSWORD'],
                                     config['LOG_FILE_PATH'])

我想知道是否有 pythonic 方法来做到这一点,而不是简单地做:

if log_file_path == 'None':
  log_file_path = None

最佳答案

YAML 文件中的 None 值并不是真正符合 Kosher YAML 标准的 YAML,因为它使用缺少值来表示 None。因此,如果您只是使用适当的 YAML,您的麻烦就会结束:

In [7]: yaml.load("""
   ...: CREDENTIALS:
   ...:   USERNAME: 'USERNAME'
   ...:   PASSWORD: 'PASSWORD'
   ...: LOG_FILE_PATH: 
   ...: """)
Out[7]: 
{'CREDENTIALS': {'PASSWORD': 'PASSWORD', 'USERNAME': 'USERNAME'},
 'LOG_FILE_PATH': None}

注意它如何将缺少 LOG_FILE_PATH 读取为 None 而不是 'None'

稍后编辑:其他也有效的值是:nullNullNULL,按照:https://yaml.org/type/null.html

关于将 'None' 字符串转换为 None 的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35467607/

相关文章:

python - 在 Pandas 列中拆分字典/列表并转换为新数据框

github - 为通过 GitHub 操作执行的单元测试运行本地主机服务器

java - 如何通过java解析yaml文件(snakeYaml)

python - discord.ext.commands.errors.CommandInvokeError : Command raised an exception: AttributeError: 'NoneType' object has no attribute 'qualified_name'

python - "pre-checking"是避免在列表上进行双重递归时添加无类型或空字符串的首选方法吗?

python - 为什么多次调用小数据时 numpy.linalg.norm 变慢?

python - 如何量化 cartToPolar 输出以估计连续帧之间的流量 Python OpenCV?

Python bytes literal 具有非十六进制的额外字符,但会改变字符串的值

yaml - 在 YAML 中重复节点值

python - PyBox2D - NoneType 在碰撞过滤期间不可下标