相关疑难解决方法(0)

1320
推荐指数
13
解决办法
37万
查看次数

如果未在str.format中传递,则将值保留为空

我遇到了一个相当简单的问题,我无法想出一个优雅的解决方案.

我正在str.format一个函数中创建一个字符串,该函数在一个dict替换中传递以用于格式.我想创建字符串并使用值格式化它们,如果它们被传递,否则将它们留空.

防爆

kwargs = {"name": "mark"}
"My name is {name} and I'm really {adjective}.".format(**kwargs)
Run Code Online (Sandbox Code Playgroud)

应该回来

"My name is mark and I'm really ."
Run Code Online (Sandbox Code Playgroud)

而不是抛出KeyError(如果我们不做任何事情会发生什么).

令人尴尬的是,我甚至无法为这个问题提出一个不优雅的解决方案.我想我可以通过不使用来解决这个问题str.format,但如果可能的话,我宁愿使用内置(主要是我想要的).

注意:我事先并不知道将使用哪些密钥.如果有人包含一把钥匙但是没有把它放在kwargs dict中,我试图优雅地失败.如果我100%准确地知道将要查找哪些键,我只需填充所有键并完成它.

python string-formatting missing-data

20
推荐指数
2
解决办法
6001
查看次数

python字符串格式suppress/silent keyerror/indexerror

有没有办法使用python string.format,这样当索引丢失时不会抛出异常,而是插入一个空字符串.

result = "i am an {error} example string {error2}".format(hello=2,error2="success")
Run Code Online (Sandbox Code Playgroud)

在这里,结果应该是:

"i am an   example string success"
Run Code Online (Sandbox Code Playgroud)

现在,python抛出了一个keyerror并停止格式化.是否有可能改变这种行为?

谢谢

编辑:

存在Template.safe_substitute(即使使模式保持原样而不是插入空字符串),但对于string.format可能没有类似的东西

期望的行为类似于php中的字符串替换.

class Formatter(string.Formatter):
  def get_value(self,key,args,kwargs):
    try:
        if hasattr(key,"__mod__"):
            return args[key]
        else:
            return kwargs[key]
    except:
        return ""
Run Code Online (Sandbox Code Playgroud)

这似乎提供了期望的行为.

python string format

16
推荐指数
3
解决办法
1万
查看次数

Python的str.format()方法的默认kwarg值

我希望尝试尽可能简单地保持现有字符串的多元化,并且想知道str.format()在寻找kwargs时是否有可能解释默认值.这是一个例子:

string = "{number_of_sheep} sheep {has} run away"
dict_compiled_somewhere_else = {'number_of_sheep' : 4, 'has' : 'have'}

string.format(**dict_compiled_somewhere_else)
# gives "4 sheep have run away"

other_dict = {'number_of_sheep' : 1}
string.format(**other_dict)
# gives a key error: u'has'
# What I'd like is for format to somehow default to the key, or perhaps have some way of defining the 'default' value for the 'has' key 
# I'd have liked: "1 sheep has run away"
Run Code Online (Sandbox Code Playgroud)

干杯

python string string-formatting default-value

13
推荐指数
1
解决办法
1万
查看次数

带有可选dict键值的字符串格式

有没有办法用dict格式化字符串,但可选择没有键错误?

这很好用:

opening_line = '%(greetings)s  %(name)s !!!'
opening_line % {'greetings': 'hello', 'name': 'john'}
Run Code Online (Sandbox Code Playgroud)

但是,让我说我不知道​​这个名字,我想格式化上面的行只是为了'greetings'.就像是,

 opening_line % {'greetings': 'hello'}
Run Code Online (Sandbox Code Playgroud)

即使以下情况,输出也会很好:

'hii %(name)s !!!'  # keeping name un-formatted 
Run Code Online (Sandbox Code Playgroud)

但这会KeyError在拆包时给出

有什么办法吗?

python string-formatting

6
推荐指数
1
解决办法
9947
查看次数