为什么我的 Python class 中设置方法的 NameError 不起作用?
Why is the NameError from the set method in my Python class not working?
好吧,这个模块是关于创建“矩阵”的。无论哪个维度,值都以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 个参数:
- 1,一个整数
- 2,一个整数
- 字母l,解析为变量名
Python 然后检查它的各种内存空间(locals
,等等)寻找变量 l
,但找不到它。因此,它甚至无法调用您的函数并立即 returns 一个 NameError
,因为您的 set 方法的参数之一有错误。
如果你想让你的参数接受字母,那么它们必须是字符串类型,当字符被单引号或双引号括起来时,Python 将解析它:
A.set(1, 2, 'l')
这会将具有一个字符 'l' 的字符串添加到位置 (1, 2)。
请注意,使用您当前的代码不会在此处生成错误,因为在您的设置方法中您没有 try/catch 块并且不检查任何类型。如果你想阻止用户输入一个字符串作为值,你需要做一些验证它是正确的 class,像这样:
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
然后我认为如果行或列输入不是整数或超出范围(与您相同在 get 方法中做了。
好吧,这个模块是关于创建“矩阵”的。无论哪个维度,值都以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 个参数:
- 1,一个整数
- 2,一个整数
- 字母l,解析为变量名
Python 然后检查它的各种内存空间(locals
,等等)寻找变量 l
,但找不到它。因此,它甚至无法调用您的函数并立即 returns 一个 NameError
,因为您的 set 方法的参数之一有错误。
如果你想让你的参数接受字母,那么它们必须是字符串类型,当字符被单引号或双引号括起来时,Python 将解析它:
A.set(1, 2, 'l')
这会将具有一个字符 'l' 的字符串添加到位置 (1, 2)。
请注意,使用您当前的代码不会在此处生成错误,因为在您的设置方法中您没有 try/catch 块并且不检查任何类型。如果你想阻止用户输入一个字符串作为值,你需要做一些验证它是正确的 class,像这样:
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
然后我认为如果行或列输入不是整数或超出范围(与您相同在 get 方法中做了。