运行为什么会报错KeyError: 'X'

来源:2-6 编程练习

thinkwinter

2019-03-28 22:18:04


class Point(object):
   # 自定义Point类的构造(初始化)方法
   def __init__(self, x, y):
       self.x = x
       self.y = y

   # 自定义Point类对象的格式化输出函数(string())
   def string(self):
       print("该图形初始化点为{X:{0},Y:{1}}".format(self.x, self.y))


class Circle(Point):
   # 自定义Circle类的构造(初始化)方法
   def __init__(self, x, y, radius):
       super(Circle, self).__init__(x, y)
       #Point.__init__(self, x, y)
       self.radius = radius

   # 自定义Circle类对象的格式化输出函数(string())
   def string(self):
       print("该图形初始化点为X:{0},Y:{1},半径为:{2}".format(self.x, self.y, self.radius))


class Size(object):
   # 自定义Size类的构造(初始化)方法
   def __init__(self, width, height):
       self.width = width
       self.height = height

   # 自定义Size类对象的格式化输出函数(string())
   def string(self):
       print("该图形初始化点为{width:{0},height:{1}}".format(self.width, self.height))


class Rectangle(Point, Size):
   # 自定义Rectangle类的构造(初始化)方法,并在方法中调用父类的初始化方法以完成初始化
   def __init__(self, x, y, width, height):
       #super(Rectangle, self).__init__(x, y)
       #super(Point, self).__init__(width, height)
       Point.__init__(self,x, y)
       Size.__init__(self, width, height)


   # 自定义Rectangle类对象的格式化输出函数(string())
   def string(self):
       #print("该图形初始化点为:X:{0},Y:{1},半径为:{2},width:{2},height:{3}".format(self.x, self.y, self.width, self.height))
       print("该图形初始化点为:{X:{0},Y:{1}},半径为:{2},width:{2},height:{3}".format(self.x, self.y, self.width, self.height))

if __name__ == "__main__":
# 实例化Circle对象,圆心为(5,5),半径为8
   circle = Circle(5, 5, 8)
   circle.string()
# 实例化Rectangle对象,顶点位置(15,15),长和宽分别为15和15
   rectang1 = Rectangle(15, 15, 15, 15)
   rectang1.string()

# 实例化Rectangle对象,顶点位置(40,30),长和宽分别为11和14
   rectang2 = Rectangle(40, 30, 11, 14)
   rectang2.string()

写回答

1回答

慕猿梦

2019-03-29

同学,你好,KeyError: 'X'错误的原因是由于Rectangle类的string方法中{X:{0},Y:{1}}最外层的花括号被format当成了变量进行填充,使用下面方法将非变量的{}修改成{{}},不再报错。

使用str.format输出花括号时:两个左花括号输出左花括号本身,两个右花括号输出右花括号本身。

http://img.mukewang.com/climg/5c9d885d000180b014310334.jpg

长方形没有半径之说,所以该string方法中,就不需要半径为:{2}的字符串了

如果我的回答解决了你的疑惑,欢迎采纳!!祝学习愉快~~~~~

0

0 学习 · 8160 问题

查看课程