形式为的Python字符串中的键错误

2024-05-21 02:58:42 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码给出了一个错误:

filename='foo.txt'
sed_str = 'PROJECT_DIR=\$\{PROJECT_DIR:-{}\}'.format(filename)
print (sed_str) 

结果:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
 <ipython-input-12-9ac4d7cde75e> in <module>()
      1 filename='foo.txt'
----> 2 sed_str = 'PROJECT_DIR=\$\{PROJECT_DIR:-{}\}'.format(filename)
      3 print (sed_str)

KeyError: 'PROJECT_DIR'

为什么我看到一个键错误?你知道吗


Tags: 代码txtprojectformatmostfoo错误dir
2条回答

正如在对您的问题的评论中所提到的,您需要避开那些不属于需要格式化的部分的花括号。以下是您遇到的问题的示例解决方案:

Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> sed_str = 's#PROJECT_DIR=\$\{PROJECT_DIR:-.*\}#PROJECT_DIR=\$\{PROJECT_DIR:-{0}\}#'
>>> print(sed_str)
s#PROJECT_DIR=\$\{PROJECT_DIR:-.*\}#PROJECT_DIR=\$\{PROJECT_DIR:-{0}\}#
>>> sed_str = 's#PROJECT_DIR=\$\{{PROJECT_DIR:-.*\}}#PROJECT_DIR=\$\{{PROJECT_DIR:-{0}\}}#'.format('filename')
>>> print(sed_str)
s#PROJECT_DIR=\$\{PROJECT_DIR:-.*\}#PROJECT_DIR=\$\{PROJECT_DIR:-filename\}#
>>> 

如果您有最新版本的Python,您可能需要考虑使用f''字符串来创建sed_str变量:

>>> path = 'filename'
>>> sed_str = f's#PROJECT_DIR=\$\{{PROJECT_DIR:-.*\}}#PROJECT_DIR=\$\{{PROJECT_DIR:-{path}\}}#'
>>> print(sed_str)
s#PROJECT_DIR=\$\{PROJECT_DIR:-.*\}#PROJECT_DIR=\$\{PROJECT_DIR:-filename\}#
>>> 

使用{{}}对格式字符串中的大括号进行转义:

filename='foo.txt'
sed_str = 'PROJECT_DIR=\$\{{PROJECT_DIR:-{}\}}'.format(filename)
print (sed_str) 

提供:

PROJECT_DIR=\$\{PROJECT_DIR:-foo.txt\}

相关问题 更多 >