🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ دانشجوی سون‌لرن
مشکل typeerror
جامعه پایتون (وب) ایجاد شده در ۱۳ دی ۱۴۰۱

سلام وقت بخیر

میشه لطفا کدمو بررسی کنید ببینید به چه علت تایپ اررور میده؟

from data import teams
def parse_result(team):
    win = 0
    draw = 0
    lose = 0
    for i in team['result']:
        if i == 'w':
            win += 1
        elif i == 'd':
            draw += 1
        elif i == 'l':
            lose += 1
    return {
        'name': team['name'].ljust(18),
        'win': win,
        'draw': draw,
        'lose': lose,
        'Goal+': team['Goal+'],
        'Goal-': team['Goal-']
    }
for team in teams:
    parse_result(teams)

سلام کیانا جان وقتت بخیر

موردی که نیاز هست حتما بهش توجه کنی دیباگ کردن هست (استفاده از دیباگر پایچرم)

و همیشه ارورت رو هم توی قالب خوانا قرار بده .

Traceback (most recent call last):
  File "/Users/mr.rezoo/.local/share/virtualenvs/test-14KeGnSv/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 3433, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "", line 1, in 
    team['result']
TypeError: list indices must be integers or slices, not str

اگ این ارور رو میگیری یعنی اون کلید وجود نداره .

خب حالا اگ بخوایم بهتر بررسیش کنیم. تیم شما شامل یک لیست از تیم‌ها هست ولی ویژگی به نام result نداره .

در واقع یک تیم اون ویژگی result رو داره. پس باید فقط یکی از دیکشنری‌ها بهش پاس داده بشه .

teams = [
         {'name' : "perspolis", "result" : "wwwwwwdddl"},
         {'name' : "sepahan", "result" : "wwwwwddddl"},
         {'name' : "esteghlal", "result" : "wwwwwddddl"},
       ]
team = {'name' : "esteghlal", "result" : "wwwwwddddl"} -> correct input
def parse_result(team):
    for i in team['result']: 
        . . . 

حالا اگ بخوای دقیق‌تر بشی به این نتیجه میرسی که

for team in teams:
    parse_result(teams)

اینجا به جای پاس دادن team در واقع teams رو پاس دادی :)

موفق باشی ?

بهترین پاسخ
Reza Mobaraki ۱۴ دی ۱۴۰۱، ۰۷:۴۲

تفاوت return و print در تابع چیه؟

چرا وقتی بجای return از print استفاده می‌کنم جواب می‌گیرم؟


kiana kargar ۱۴ دی ۱۴۰۱، ۰۷:۴۸

به جای پاس دادن team به حلقه for در واقع teams رو پاس دادی .

همچنین کلید هایی که نوشتی

'Goal+': team['Goal+']
'Goal-': team['Goal-']

وجود ندارن . . .

در کنار درست مطرح کردن ارور باید داده‌ها رو هم ارسال کنید.

Reza Mobaraki ۱۴ دی ۱۴۰۱، ۰۷:۵۲