numpy TypeError:Medal.__new__()缺少3个必需的位置参数:“运动员”、“团队”和“事件

k4emjkb1  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(102)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[19], line 1
----> 1 medals =[Medal(line.split('\t')) for line in open('goldmedals.txt','r')]
      2 medals[:10]

Cell In[19], line 1, in <listcomp>(.0)
----> 1 medals =[Medal(line.split('\t')) for line in open('goldmedals.txt','r')]
      2 medals[:10]

TypeError: Medal.__new__() missing 3 required positional arguments: 'athlete', 'team', and 'event'
import collections

import numpy as np

open('goldmedals.txt','r').readlines()[:10]
["1992\tA Dijiang\tCHN\tBasketball Men's Basketball\tNA\t\t\t\t\t\t\t\t\t\t\t\n",
 "2012\tA Lamusi\tCHN\tJudo Men's Extra-Lightweight\tNA\t\t\t\t\t\t\t\t\t\t\t\n",
 "1920\tGunnar Nielsen Aaby\tDEN\tFootball Men's Football\tNA\t\t\t\t\t\t\t\t\t\t\t\n",
 "1900\tEdgar Lindenau Aabye\tDEN\tTug-Of-War Men's Tug-Of-War\tGold\t\t\t\t\t\t\t\t\t\t\t\n",
 "1988\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 500 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n",
 "1988\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 1,000 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n",
 "1992\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 500 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n",
 "1992\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 1,000 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n",
 "1994\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 500 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n",
 "1994\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 1,000 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n"]
Medal = collections.namedtuple('Medal', ['year','athlete','team','event'])

m = Medal('1992', 'A Dijiang', 'CHN', 'Basketball Men\\'s Basketball')

m
Medal(year='1992', athlete='A Dijiang', team='CHN', event="Basketball Men's Basketball")
m[0], m[3]
('1992', "Basketball Men's Basketball")
m.year, m.athlete, m.team
('1992', 'A Dijiang', 'CHN')
medals = [line.split(',') for line in open('goldmedals.txt','r')]

medals[:10]
[["1992\tA Dijiang\tCHN\tBasketball Men's Basketball\tNA\t\t\t\t\t\t\t\t\t\t\t\n"],
 ["2012\tA Lamusi\tCHN\tJudo Men's Extra-Lightweight\tNA\t\t\t\t\t\t\t\t\t\t\t\n"],
 ["1920\tGunnar Nielsen Aaby\tDEN\tFootball Men's Football\tNA\t\t\t\t\t\t\t\t\t\t\t\n"],
 ["1900\tEdgar Lindenau Aabye\tDEN\tTug-Of-War Men's Tug-Of-War\tGold\t\t\t\t\t\t\t\t\t\t\t\n"],
 ["1988\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 500 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n"],
 ["1988\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 1",
  '000 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n'],
 ["1992\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 500 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n"],
 ["1992\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 1",
  '000 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n'],
 ["1994\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 500 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n"],
 ["1994\tChristine Jacoba Aaftink\tNED\tSpeed Skating Women's 1",
  '000 metres\tNA\t\t\t\t\t\t\t\t\t\t\t\n']]
medals =[Medal(*line.split(',')) for line in open('goldmedals.txt','r')]

medals[:10]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[12], line 1
----> 1 medals =[Medal(*line.split(',')) for line in open('goldmedals.txt','r')]
      2 medals[:10]

Cell In[12], line 1, in <listcomp>(.0)
----> 1 medals =[Medal(*line.split(',')) for line in open('goldmedals.txt','r')]
      2 medals[:10]

TypeError: Medal.__new__() missing 3 required positional arguments: 'athlete', 'team', and 'event'
vql8enpb

vql8enpb1#

看起来错误是您在,上分割goldmedals.txt中的行,但文件中的字段实际上是用\t分隔的。
当你在不存在的,上进行分割时,你会得到一个只有一个字符串的列表。你的命名元组需要四个参数,所以当你用一个元素展开你的列表时,它会告诉你你缺少了四减一或三个参数。
现在,您的数据包含许多选项卡,因此如果您按选项卡拆分,您需要将前四个结果切片并将其扩展到Medal构造函数中,否则您将获得有关提供过多参数的错误。

jq6vz3qz

jq6vz3qz2#

我看不出你问的实际问题,所以如果你已经知道这一点,请道歉,但是你得到的错误源于这样一个事实,即你正在对包含逗号(,)的有效数据执行line.split(','),例如。"速滑女子1,000米"对于像这样的行,它会在逗号处分裂成1,000分.那么当你试图构造Medal()时,它将没有足够的参数。请尝试在制表符('\t')处拆分。

相关问题