Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带“quot;”的键的字符串格式:&引用;及/&引用;_Python_Python 2.7_String Formatting - Fatal编程技术网

Python 带“quot;”的键的字符串格式:&引用;及/&引用;

Python 带“quot;”的键的字符串格式:&引用;及/&引用;,python,python-2.7,string-formatting,Python,Python 2.7,String Formatting,存在带有:和/的格式字符串。尝试使用值dict格式化时,会抛出: ValueError: Missing ']' in format string 例如: In [312]: value Out[312]: {'key:/key_part': 1} In [313]: string_to_format Out[313]: '{v[key:/key_part]}' In [314]: string_to_format.format(v=SafeDict(value)) -----------

存在带有
/
的格式字符串。尝试使用值
dict
格式化时,会抛出:

ValueError: Missing ']' in format string
例如:

In [312]: value
Out[312]: {'key:/key_part': 1}

In [313]: string_to_format
Out[313]: '{v[key:/key_part]}'

In [314]: string_to_format.format(v=SafeDict(value))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-314-3ee97d9dfb86> in <module>()
----> 1 string_to_format.format(v=SafeDict(value))

ValueError: Missing ']' in format string

关于如何解决这个问题有什么想法吗?

这是字符串格式化实现中使用的基本解析的已知限制。中的部分介绍了
str.format
语法中的“getitem”支持(重点):

“getitem”语法的一个示例:

“我的名字是{0[name]}”。格式(dict(name='Fred'))

需要注意的是,在格式字符串中使用“getitem”比其常规用法要有限得多。在上面的示例中,字符串“name”实际上是文本字符串“name”,而不是名为“name”的变量。解析项键的规则非常简单。如果它以一个数字开头,那么它将被视为一个数字,否则它将被用作一个字符串

由于键不以引号分隔,因此无法从格式字符串中指定任意字典键(例如字符串“10”或“:-]”)

随后在“实施说明”下:

str.format()

这是str.format设计上的一个缺点。细心的读者可能会注意到OP的字符串格式在Python3中工作。在Python3.4中修补了一些边缘案例,但在Python3.3及以下版本中仍然存在相同的问题

有关的罚单被没收了。由于Python 2.7现在已经过时,从Python 3.4后端口到2.7的改进机会为零,因此您必须在两个选项中进行选择:

  • 升级到Python 3
  • 重构代码,使字符串格式仅使用简单的名称或数字

  • 这是字符串格式化实现中使用的基本解析的已知限制。中的部分介绍了
    str.format
    语法中的“getitem”支持(重点):

    “getitem”语法的一个示例:

    “我的名字是{0[name]}”。格式(dict(name='Fred'))

    需要注意的是,在格式字符串中使用“getitem”比其常规用法要有限得多。在上面的示例中,字符串“name”实际上是文本字符串“name”,而不是名为“name”的变量。解析项键的规则非常简单。如果它以一个数字开头,那么它将被视为一个数字,否则它将被用作一个字符串

    由于键不以引号分隔,因此无法从格式字符串中指定任意字典键(例如字符串“10”或“:-]”)

    随后在“实施说明”下:

    str.format()

    这是str.format设计上的一个缺点。细心的读者可能会注意到OP的字符串格式在Python3中工作。在Python3.4中修补了一些边缘案例,但在Python3.3及以下版本中仍然存在相同的问题

    有关的罚单被没收了。由于Python 2.7现在已经过时,从Python 3.4后端口到2.7的改进机会为零,因此您必须在两个选项中进行选择:

  • 升级到Python 3
  • 重构代码,使字符串格式仅使用简单的名称或数字

  • 更改为Python3,在那里它可以工作。也许
    string_to_format='{v}';string_to_format.format(v=SafeDict(value)['key:/key_part'])
    取而代之?@0x5453格式字符串中会有多个键,如上所述。我想这在多个键上不起作用。@wim,是的,我已经在python3中尝试过了,而且很有效。但是我需要这个来代替python2。关于如何在python2中实现这一点有什么想法吗?@Yogaraj No.在python2中不起作用,也永远不会起作用,因为它是EOL.Change to Python3,在那里它起作用。也许
    string_to_format='{v}';string_to_format.format(v=SafeDict(value)['key:/key_part'])
    取而代之?@0x5453格式字符串中会有多个键,如上所述。我想这在多个键上不起作用。@wim,是的,我已经在python3中尝试过了,而且很有效。但是我需要这个来代替python2。关于如何在python2中实现这一点有什么想法吗?@Yogaraj No.在python2中不起作用,而且永远不会,因为它是EOL。谢谢。我已经重构了我的代码,用一个简单的标识符替换了
    :/
    。谢谢。我已经重构了我的代码,用一个简单的标识符替换了
    :/
    In [311]: class SafeDict(dict):
         ...:     def __missing__(self, key):
         ...:         return "NULL"