gpt4 book ai didi

python - 在Python中,为什么这一行从文件中运行(无异常),但在shell中运行时抛出异常?

转载 作者:行者123 更新时间:2023-11-30 23:01:33 26 4
gpt4 key购买 nike

我正在查看 Peter Norvig 的数独解算器代码 ( http://norvig.com/sudopy.shtml ) 并遇到了这一行:

peers = dict((s, set(sum(units[s],[]))-set([s]))
for s in squares)

如果我将代码复制到并包括这一行(即直到第 28 行),并从文件中运行它,它运行良好,并且字典“peers”具有异常(exception)值。但是,如果在运行此文件后,我尝试从 shell 运行此行,则会收到错误:

peers = dict((s, set(sum(units[s],[]))-set([s]))
for s in squares)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-33-2652de1ecd8a> in <module>()
1 peers = dict((s, set(sum(units[s],[]))-set([s]))
----> 2 for s in squares)

<ipython-input-33-2652de1ecd8a> in <genexpr>((s,))
1 peers = dict((s, set(sum(units[s],[]))-set([s]))
----> 2 for s in squares)

C:\PyCanopy\User\lib\site-packages\numpy\core\fromnumeric.pyc in sum(a, axis, dtype, out, keepdims)
1717 except AttributeError:
1718 return _methods._sum(a, axis=axis, dtype=dtype,
-> 1719 out=out, keepdims=keepdims)
1720 # NOTE: Dropping the keepdims parameters here...
1721 return sum(axis=axis, dtype=dtype, out=out)

C:\PyCanopy\User\lib\site-packages\numpy\core\_methods.pyc in _sum(a, axis, dtype, out, keepdims)
30
31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32 return umr_sum(a, axis, dtype, out, keepdims)
33
34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: cannot perform reduce with flexible type

我一直无法弄清楚这是为什么。我一开始就发现这行代码很奇怪,因为它对 dict 键的值加上一个空的 [] 进行了 sum 计算。有什么指导吗?谢谢。

最佳答案

该代码在 python 解释器和 ipython 中都适用于我。看起来在运行代码之前您执行了以下操作:

from numpy import sum

所以现在 sum 不是 python 的标准 sum,而是从 numpy 导入的不同函数。这就是代码引发错误的原因。

解决方案:只需退出ipython shell,再次运行它并将代码粘贴到其中即可。

编辑:对于空列表的总和,这只是使单位平坦的一个技巧。例如,单位 ['I1'] 如下所示:

[['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1', 'I1'],
['I1', 'I2', 'I3', 'I4', 'I5', 'I6', 'I7', 'I8', 'I9'],
['G1', 'G2', 'G3', 'H1', 'H2', 'H3', 'I1', 'I2', 'I3']]

sum(units['I1'], []) 如下所示:

['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1', 'I1', 'I1', 'I2', 'I3', 'I4', 'I5', 'I6', 'I7', 'I8', 'I9', 'G1', 'G2', 'G3', 'H1', 'H2', 'H3', 'I1', 'I2', 'I3']

总和在幕后的作用是这样的:

list = []
for elem in units['I1']:
list = list + elem

关于python - 在Python中,为什么这一行从文件中运行(无异常),但在shell中运行时抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com