好的,这是东西,这个模块是关于创建“矩阵”的。无论什么维,值都以0开头。我有一个名为set的函数,该函数将矩阵的位置之一交换为特定数字。
A = Matrix(3,3)
print(A)
0 0 0
0 0 0
0 0 0
A.set(1,2,3)
print(A)
0 0 0
0 0 3
0 0 0
我需要设置为仅接受数字或浮点数,不包含任何字符串,因此引发了NameError,但没有捕获。似乎为了使我的代码正常工作并显示NameError,我需要使用“”书写,因为如果没有,它告诉我未定义。
我需要这些:
例:
A.set(1,2,l)
returns “Not a number or a float”
但是反而我得到这个
A.set(1,2,l)
returns “NameError: l is not defined”
我可以从我的代码中解决什么,使我的NameError被捕获?
class Matrix():
def __init__(self,width,height):
fill_value = 0
self.height = height #columna
self. width = width #fila
self.rows = [[fill_value] * width for _ in range (height)]
self.m = self.rows
def __str__(self):
return "\n".join(" ".join(map(str, self.m))for self.m in self.m)
def get(self, row_index, column_index):
try:
return self.m[row_index][column_index]
except NameError:
return "Its not a number"
except IndexError:
return "Not in matrix range"
def set(self, row_index,column_index,value):
self.m[row_index][column_index] = value
钯 我正在尝试使用get函数(在这种情况下仅使用int)进行操作,而且它也无法正常工作。
混乱之处在于Python如何解释您在参数中传递给函数的值。
当您像这样调用函数时:
A.set(1,2,l)
您正在传递3个参数:
然后,Python检查它的各种内存空间(locals
等)以查找变量l
,但找不到它。因此,它甚至无法调用您的函数并立即返回a NameError
,因为set方法的一个参数有错误。
如果要让参数接受字母,则它们必须是字符串类型,当字符用单引号或双引号引起来时,Python会解析该字符串类型:
A.set(1, 2, 'l')
这会将带有一个字符“ l”的字符串添加到位置(1、2)。
请注意,使用您当前的代码,您将不会在这里产生错误,因为在您的set方法中,您没有try / catch块,并且不会检查任何类型。如果要阻止用户将字符串作为值输入,则需要进行一些验证以确保它是正确的类,如下所示:
def set(self, row_index,column_index,value):
if not isinstance(value, (int, float)):
raise NameError(f"value (arg 3) must be an int or float, was a {type(value)}")
else:
self.m[row_index][column_index] = value
然后,我认为self.m[row_index][column_index] = value
如果行或列的输入不是整数或超出范围(与get方法相同),您将需要将try包装到try / catch中以引发错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句