Почему str.format выбрасывает KeyError: '' для этой, казалось бы, простой операции форматирования строки? - PullRequest
1 голос
/ 19 июня 2019

Я написал код ниже и получаю сообщение об ошибке, где бы я ни использовал метод .format () по сравнению с боковой частью f-строки.Сообщение об ошибке:

KeyError: ''

Не уверен, почему ".format ()" не работает, как боковая сторона f-строки.Если нет, код работает просто отлично, кроме областей, где использовался «.format»

Не могли бы вы указать мне правильное направление?Очень ценится!


class Inventory ():

    make = "Verra"

    def __init__ (self,country,isnew,sbalance = 0,cbalance = 0):

        self.country = country
        self.isnew = isnew
        self.cbalance = cbalance
        self.sbalance = sbalance



    def entry_sugar (self,sugar_1 = 0):

        self.sbalance += sugar_1

        print(f"You have just added {sugar_1} bags of sugar to your sugar 
        inventory")

        print(f"Your new sugar inventory balance is : {self.sbalance} bags.")



    def entry_corn (self,corn_1 = 0):

        self.cbalance += corn_1

        print(f"You have just added {corn_1} corn(s) to your corn inventory.")

        print(f"Your new corn inventory balance is : {self.cbalance}.")




    def withdawal_sugar(self,sugar_2 = 0):

        if self.sbalance == 0:

            print("Your current sugar inventory is at 0.You cannot withdraw an 
            item at this time")

        else:

            self.sbalance = self.sbalance - sugar_2

            print("You have just withdrawned { } bags of sugar from your sugar 
            inventory".format(sugar_2))

            print(f"Your new sugar inventory balance is : {self.sbalance} bags 
            of sugar.")



    def withdawal_corn(self,corn_2 = 0):

        if self.cbalance == 0:

            print("Your current corn inventory is at 0.You cannot withdraw an 
            item at this time")

        else:

            self.cbalance = self.cbalance - corn_2

            print(f"You have just withdrawned {corn_2} corn(s) from your corn 
            inventory")

            print(f"Your new corn inventory balance is : {self.cbalance}")


    def total_balance (self):

        print("Balance Summary:")     
        print("Your corn balance is {}".format(self.cbalance))
        print("Your sugar balance at this time is{}".format(self.sbalance))


Ответы [ 2 ]

1 голос
/ 19 июня 2019

Дополнительный пробел между { } является проблемой.

value = 123

print("{}".format(value))  # '123'

print("{ }".format(value))
Traceback (most recent call last):
  File "<console>", line 1, in <module>
KeyError: ' '

В Отформатированные строковые литералы , вы можете добавить дополнительный пробел в { }, если вам нужно.

value = 123

print(f"{value}")  # 123

print(f"{ value }")  # 123
1 голос
/ 19 июня 2019

Это определенно опечатка, возникающая из-за пробелов, которые вы добавили в фигурные скобки.Тем не менее, я думаю, что стоит немного объяснить, почему это происходит, поэтому будьте осторожны, чтобы не совершить ту же ошибку.

Согласно документации в .format,

Строка, для которой вызывается этот метод, может содержать буквенный текст или замещающие поля, разделенные фигурными скобками {}.Каждое поле замены содержит либо числовой индекс позиционного аргумента, либо имя ключевого аргумента.

Это означает, что все, что находится внутри фигурной скобки {}, будет интерпретироваться как поле замены,В данном случае это пробел.

Чтобы увидеть, как это будет работать, вам нужно сделать что-то странное, например, передать kwargs format:

>>> '{ }'.format(123)
KeyError: ' '
>>> '{ }'.format(**{' ': 123})
'123'

Это будетВы были очень простой литеральной интерполяцией, если бы вы просто пропустили пробел.

>>> '{}'.format(123)
'123'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...