为什么我的Python类中的set方法中的NameError不起作用?

阿那山

好的,这是东西,这个模块是关于创建“矩阵”的。无论什么维,值都以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)进行操作,而且它也无法正常工作。

轻CC

混乱之处在于Python如何解释您在参数中传递给函数的值。

当您像这样调用函数时:

A.set(1,2,l) 

您正在传递3个参数:

  • 1,整数
  • 2,一个整数
  • 字母l,被解析为变量的名称

然后,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么SET LINESIZE在我的脚本中不起作用?

来自分类Dev

为什么我处理数组的方法在 ECMA6 的类中不起作用

来自分类Dev

为什么我的post方法在Laravel中不起作用?

来自分类Dev

为什么我的def函数在Python中不起作用?

来自分类Dev

为什么我的arraylist的Java Set方法不起作用?

来自分类Dev

为什么MongoDB类在Laravel中不起作用?

来自分类Dev

为什么我的记录器信息在服务类上不起作用,但在控制器中起作用?

来自分类Dev

为什么pygame set_timer()在我的代码中不起作用?

来自分类Dev

为什么private(set)在Swift中不起作用?

来自分类Dev

为什么--type-set在ack中不起作用?

来自分类Dev

为什么我的find('a')在jquery中不起作用?

来自分类Dev

为什么Rewriterule在我的.htaccess文件中不起作用?

来自分类Dev

为什么我的onload在Wordpress中不起作用?

来自分类Dev

为什么XPath count()在PHP中对我不起作用?

来自分类Dev

为什么在PowerShell中的.split对我不起作用?

来自分类Dev

为什么我的日期在TypeScript中不起作用?

来自分类Dev

为什么我在WPF中的触发事件不起作用?

来自分类Dev

为什么符号“&”在我的scss代码中不起作用?

来自分类Dev

设置nofoldenable在我的vim中不起作用-为什么?

来自分类Dev

为什么我在终端中的“ at”命令不起作用?

来自分类Dev

为什么我在Android中的按钮不起作用?

来自分类Dev

为什么我的指令在Plunker中不起作用?

来自分类Dev

为什么我的日期比较在JavaScript中不起作用?

来自分类Dev

为什么我的别名在Zsh中不起作用?

来自分类Dev

为什么 JavaScript 中的 saveAs() 对我不起作用?

来自分类Dev

为什么我的 scanf 在函数中不起作用?

来自分类Dev

为什么 if/else 语句在我的函数中不起作用?

来自分类Dev

为什么我的引号在 CMD 中不起作用

来自分类Dev

为什么我在 AngularJS 中的路由不起作用?

Related 相关文章

  1. 1

    为什么SET LINESIZE在我的脚本中不起作用?

  2. 2

    为什么我处理数组的方法在 ECMA6 的类中不起作用

  3. 3

    为什么我的post方法在Laravel中不起作用?

  4. 4

    为什么我的def函数在Python中不起作用?

  5. 5

    为什么我的arraylist的Java Set方法不起作用?

  6. 6

    为什么MongoDB类在Laravel中不起作用?

  7. 7

    为什么我的记录器信息在服务类上不起作用,但在控制器中起作用?

  8. 8

    为什么pygame set_timer()在我的代码中不起作用?

  9. 9

    为什么private(set)在Swift中不起作用?

  10. 10

    为什么--type-set在ack中不起作用?

  11. 11

    为什么我的find('a')在jquery中不起作用?

  12. 12

    为什么Rewriterule在我的.htaccess文件中不起作用?

  13. 13

    为什么我的onload在Wordpress中不起作用?

  14. 14

    为什么XPath count()在PHP中对我不起作用?

  15. 15

    为什么在PowerShell中的.split对我不起作用?

  16. 16

    为什么我的日期在TypeScript中不起作用?

  17. 17

    为什么我在WPF中的触发事件不起作用?

  18. 18

    为什么符号“&”在我的scss代码中不起作用?

  19. 19

    设置nofoldenable在我的vim中不起作用-为什么?

  20. 20

    为什么我在终端中的“ at”命令不起作用?

  21. 21

    为什么我在Android中的按钮不起作用?

  22. 22

    为什么我的指令在Plunker中不起作用?

  23. 23

    为什么我的日期比较在JavaScript中不起作用?

  24. 24

    为什么我的别名在Zsh中不起作用?

  25. 25

    为什么 JavaScript 中的 saveAs() 对我不起作用?

  26. 26

    为什么我的 scanf 在函数中不起作用?

  27. 27

    为什么 if/else 语句在我的函数中不起作用?

  28. 28

    为什么我的引号在 CMD 中不起作用

  29. 29

    为什么我在 AngularJS 中的路由不起作用?

热门标签

归档