2014-06-28 15 views
32

Jestem nowy w Pythonie, a ja próbuję utworzyć tablicę skrótów, która sprawdza, czy klucz wskazuje na wartość w tabeli, a jeśli nie, inicjuje ją pusta tablica. Część wykraczająca mojego kodu jest linia:TypeError: get() nie przyjmuje argumentów słów kluczowych

converted_comments[submission.id] = converted_comments.get(submission.id, default=0) 

pojawia się błąd:

TypeError: get() takes no keyword arguments 

Ale w dokumentacji (i różnych kawałków kodu przykładu), widzę, że to jednak potrwać domyślnym argumentem:

https://docs.python.org/2/library/stdtypes.html#dict.get http://www.tutorialspoint.com/python/dictionary_get.htm

Following is the syntax for get() method:

dict.get(key, default=None)

Nie ma nic na ten temat w Stack, więc zakładam, że to błąd początkującego?

+2

Przykład w drugim linku jest zabawny. – ziyuang

Odpowiedz

17

Komunikat o błędzie mówi, że get przyjmuje żadnych argumentów, słów kluczowych, ale dostarczają jedną z default=0

converted_comments[submission.id] = converted_comments.get(submission.id, 0) 
+0

Po prostu zdałem sobie sprawę, widziałem to, gdybym przewinął w dół. Ups! Dzięki! – itsmichaelwang

+4

Wolę inną odpowiedź, ponieważ nie odnosi się do faktu, że jest to zaskakujące ograniczenie, ponieważ zwykle funkcje Pythona pozwalają na argumenty słów kluczowych. Druga odpowiedź dotyczy tego. –

62

Ze względu na sposób API C-level Python rozwijany, wiele wbudowanych funkcji i metod don faktycznie mają nazwy dla swoich argumentów. Nawet jeśli dokumentacja wywoła argument default, funkcja nie rozpozna nazwy default jako odnoszącej się do opcjonalnego drugiego argumentu. Musisz podać argument w sposób pozycyjny:

>>> d = {1: 2} 
>>> d.get(0, default=0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: get() takes no keyword arguments 
>>> d.get(0, 0) 
0 
+19

Zasugerowałeś, ale nie powiedziałeś wprost: funkcje Pythona zwykle pozwalają na dowolne nazwane argumenty. Interfejs API poziomu C jest wyjątkiem od reguły. – idbrii

+0

Dzięki, chociaż jest to bardziej denerwujące, jeśli chcę debugować bieżący kod – Dejell

+1

Wow Użyłem Pythona przez 7 lat i nigdy nie wiedziałem, że istnieją funkcje, które nie biorą argumentów słów kluczowych. To dziwne, z pewnością tłumacz mógł utrzymywać słownik wbudowanych funkcji i ich nazw argumentów, aby mógł akceptować argumenty słów kluczowych o prawie zerowym koszcie runtime? (Jedyny koszt byłby podczas generowania kodu bajtowego, a byłby bardzo mały.) – max

Powiązane problemy