获取错误:格式不受支持的字符

时间:2016-11-12 04:34:42

标签: python string-formatting

我的查询是编写一个函数,在给定的年数后,计算并计算具有给定初始余额和利率的银行账户的余额。假设每年的利息复杂化。

这是我到目前为止的代码,但我收到以下错误追溯

ShowDialog()

我不知道为什么。请帮忙。这是我的代码:

(most recent call last):
  File "C:\Users\Brandon\Desktop\Assignment 5\Assignment 5 question 4.py", line 46, in <module>
    Compount_Interest(B, I, N, T)
  File "C:\Users\Brandon\Desktop\Assignment 5\Assignment 5 question 4.py", line 40, in Compount_Interest
    print("The compound interest for %.InputT years is %.Cinterest" %Cinterest)
ValueError: unsupported format character 'I' (0x49) at index 28

1 个答案:

答案 0 :(得分:0)

错误unsupported format character 'I'表示您为字符串格式使用了错误的(未知的)转换类型。

通过使用插值运算符 %(也称为字符串格式运算符),您可以访问预计也将是在设置运算符后命名。正如您在documentation中看到的那样,可以包含更多可选字符来完善运算符的行为/结果,但是最后一个(代表转换类型的字符)是必需的。

您的问题可以归结为以下代码,它将给出相同的错误:

>>> "%.InputT" % "foo"
ValueError: unsupported format character 'I' (0x49) at index 2

如您在此处看到的(索引2指向左侧字符串I的引用),I用作要使用的转换类型的标识符。这是因为.被解释为最小字段宽度的可选 precision 。因此,下一个字符是 format字符

如果要引用字符串,则可以简单地使用%s(或其他导致特定转换类型的格式字符:int%d以及float%f)像这样:

>>> "%s got $%d, now he has $%f total." % ("Peter", 12, 12.55)
'Peter got $12, now he has $12.550000 total.'

但是您似乎想命名您的占位符。因此,您必须为此使用括号并通过字典对其进行引用:

>>> "%(name)s got $%(dollars)d" % {"name": "Maria", "dollars": 50}
'Maria got $50'

对于您的代码,还有另一个明显的问题。您在命名InputTCinterest,但只为InputT提供了解决方案。我认为您想做这样的事情:

print("The compound interest for %(InputT)s years is %(Cinterest)s" % {
    "InputT": InputT, "Cinterest": Cinterest})

# or without naming it explicitly
print("The compound interest for %s years is %s" % (InputT, Cinterest))

顺便说一句:您正在使用旧式字符串格式,方法是使用%-运算符而不是new-style method .format(),或者因为Python3.6甚至是f-strings,例如f"…"。这可以使您的生活更加简单。