【发布时间】:2016-03-03 21:23:07
【问题描述】:
所以我正在尝试实现一个点类,它创建一个点,然后旋转、缩放和平移该点。这是我目前写的。
class Point:
'''
Create a Point instance from x and y.
'''
def __init__(self, x, y):
self.x = 0
self.y = 0
'''
Rotate counterclockwise, by a radians, about the origin.
'''
def rotate(self, a):
self.x0 = math.cos(this.a) * self.x - math.sin(this.a) * self.y
self.y0 = math.sin(this.a) * self.x + math.cos(this.a) * self.y
'''
Scale point by factor f, about the origin.
Exceptions
Raise Error if f is not of type float.
'''
def scale(self, f):
self.x0 = f * self.x
self.y0 = f * self.y
'''
Translate point by delta_x and delta_y.
Exceptions
Raise Error if delta_x, delta_y are not of type float.
'''
def translate(self, delta_x, delta_y):
self.x0 = self.x + delta_x
self.y0 = self.y + delta_y
'''
Round and convert to int in string form.
'''
def __str__(self):
return int(round(self.x))
此代码中的某些内容正在生成错误。现在我还没有实现错误捕获,我在顶部确实有一个错误方法
class Error(Exception):
def __init__(self, message):
self.message = message
但是,如果某个变量不是浮点类型,我将如何捕捉错误?
这是我正在使用的 if 语句之一:
def __init__(self, x, y):
if not isinstance(x, float):
raise Error ("Parameter \"x\" illegal.")
self.x = x
self.y = y
if not isinstance(y, float):
raise Error ("Parameter \"y\" illegal.")
self.x = x
self.y = y
但这会给我一个缩进错误。那么我如何才能准确地打印出一条错误消息,准确说明是哪个变量导致了问题呢?
【问题讨论】:
-
“此代码中的某些内容正在生成错误。”是什么产生了错误? (提示:错误信息告诉你。)
-
不应该
self.x = 0是self.x = x和self.y = 0是self.y = y? -
错误显示“ Traceback (最近一次调用最后一次): File "test_A.py", line 17, in
print Point(0.0,1.0) TypeError: str 返回非字符串(int 类型)" -
为什么要关心变量是float?如果你想确保它是一个数字,你可以查询变量是否是数字类型的实例,如果不是自己抛出自定义错误......
-
您的错误是因为您将 str 的返回值转换为 int 而不是 str
标签: python error-handling point