【问题标题】:for name in names: TypeError: 'NoneType' object is not iterable对于名称中的名称:TypeError:'NoneType' 对象不可迭代
【发布时间】:2019-11-18 09:30:14
【问题描述】:

我在我的代码中遇到了TypeError: 'NoneType' object is not iterable这个问题,用于在名为Qrely的类中编写一个方法,它在__init__方法中采用了一些实例,如下所示:def __init__(self,ah=(),bh=(),av=(),bv=(),aph=(),bph=(), apv=(),bpv=()): 我遇到问题的方法是:

我尝试通过使用调度来更改实例类型,例如 ah:Tuple,但我得到了同样的错误

 def qrelay_op(self,n, phi, alpha, delta):
        self.ah = symbols(print("a_H1={:d}".format(n + 1)))
        self.bh = symbols(print("b_H1={:d}".format(n + 1)))
        self.av = symbols(print("a_V1={:d}".format(n + 1)))
        self.bv = symbols(print("b_V1={:d}".format(n + 1)))
        op = 0

        for i in range(0,n-1):
            op += phi[i] * (self.ah[i]*self.bh[i] + self.av[i]*self.bv[i])

        B = 1/sqrt(2)*np.array([[1, 1],[-1, 1]])

        self.aph = symbols(print("a'_H1={:d}".format(n + 1)))
        self.bph = symbols(print("b'_H1={:d}".format(n + 1)))
        self.apv = symbols(print("a'_V1={:d}".format(n + 1)))
        self.bpv = symbols(print("b'_V1={:d}".format(n + 1)))

        for i in range(0,n-1):
            op = np.transpose(op, self.bh[i], self.ah[i+1], self.bph[i], self.aph[i+1], B)
            op = np.transpose(op, self.bv[i], self.av[i+1], self.bpv[i], self.apv[i+1], B)

        op = np.transpose(op, self.ah[0], self.av[0], self.aph[0], self.apv[0], self.rotatmatrix(alpha))
        op = np.transpose(op, self.bh[n-1], self.bv[n-1], self.bph[n-1], self.bpv[n-1], self.rotatmatrix(delta))

        syms = Qrely(self.ah, self.bh, self.av, self.bv, self.aph, self.bph, self.apv, self.bpv)

        return syms, op

当我测试代码时,例如: A=Qrely() print(A.qrelay_op(3, np.array([np.pi, np.pi/2, np.pi/5]), np.pi/4, np.pi/3)) 我收到此错误: line 693, in symbols for name in names:TypeError: 'NoneType' object is not iterable 我不能(在我的代码中找不到这个无类型的对象,或者我遗漏了一些东西,即使对我来说一切都很好

【问题讨论】:

  • 当您不向我们展示失败的代码时,很难帮助您...
  • 大概,names 是 None 而不是一个列表
  • @alfasin 这是我目前遇到问题的代码的唯一部分,因为我已经测试了其他方法并且它们正在工作,并且它本身就是一个可以运行的代码正如我在问题中所说,只需将其放在 Class 中,__init__ 方法有这些实例 def __init__(self,ah=(),bh=(),av=(),bv=(),aph=(),bph=(), apv=(),bpv=()):
  • 您询问了一行代码中的错误,但您向我们展示了代码的不同部分。老实说,我不知道该说什么......
  • @alfasin 错误发生在第 35 行,qrelay_op self.ah = symbols(print("a_H1={:d}".format(n + 1)))

标签: python symbols


【解决方案1】:

如果您说self.ah = symbols(print("a_H1={:d}".format(n + 1))) 是问题所在,我们需要了解symbols 在做什么。

看起来symbols 希望你传递给它一些可迭代的东西,但你传递给它的是 print() 函数的输出,即 None

>>> a = print('Sample Text')
>>> print(a)
None

尝试改变

self.ah = symbols(print("a_H1={:d}".format(n + 1))) 

self.ah = symbols("a_H1={:d}".format(n + 1))

【讨论】:

  • 我刚刚完成并尝试再次运行它,但这次我得到一个TypeError: 'Symbol' object does not support indexing,这次错误发生在op += phi[i] * (self.ah[i]*self.bh[i] + self.av[i]*self.bv[i])
  • 我不知道你想在这里完成什么。就语法而言,self.ah[i] 试图获取self.ah 的第一个元素,即单个Symbol。但是你不能这样做,因为这不是单个Symbol 的工作方式。这里没有足够的代码来解决这个问题。
  • 好吧,我想要从前 4 行中实现的是给我一个字符串列表,用空格分隔来创建一个符号列表,这个列表的长度将是 n 然后使用循环 for i in range ( 0,n-1) to execute the op += phi[i] * (self.ah[i]*self.bh[i] + self.av[i]*self.bv[i])` 并获取符号列表在 aph 和两者中......
  • 预期的输出类似于朱莉娅语言,我们可以这样做:ah= symbols(@sprintf("a_H1:%d",4),输出将是(a_H1, a_H2, a_H3,a_H4)
  • output = [symbols('a_H{}'.format(i)) for i in [1,2,3,4]]
猜你喜欢
  • 2012-08-25
  • 1970-01-01
  • 2017-08-29
  • 2016-08-30
  • 2014-11-21
  • 1970-01-01
相关资源
最近更新 更多