2014-12-15 18 views
9

Próbuję oddzielić sekcję dokumentu na różne składniki oddzielone znakami ampersand. To jest to, co mam:TypeError: split() nie przyjmuje argumentów słów kluczowych.

name,function,range,w,h,k,frac,constraint = str.split(str="&", num=8) 

błąd:

TypeError: split() takes no keyword arguments 

Może ktoś wyjaśnić ten błąd do mnie, a także zapewnić alternatywny sposób dla mnie do tej pracy?

Odpowiedz

15

Parametry str.split nazywane są sep i maxsplit:

str.split(sep="&", maxsplit=8) 

Ale można używać tylko nazwy parametrów jak to w Pythonie 3.x. W Pythonie 2.x, trzeba zrobić:

str.split("&", 8) 

który moim zdaniem jest najlepsza dla obu wersji ponieważ korzystanie z nazwy jest tak naprawdę zbędne. str.split jest bardzo dobrze znanym narzędziem w Pythonie, więc wątpię, aby programiści Pythona mieli problem ze zrozumieniem znaczenia argumentów metody.

Należy również unikać tworzenia nazw definiowanych przez użytkownika tak samo jak jednej z wbudowanych nazw. Wykonanie tego przyćmiewa wbudowane funkcje i sprawia, że ​​nie można go używać w bieżącym zakresie. Tak więc wybrałbym inną nazwę dla twojego ciągu oprócz str.

+0

Nie tylko nie ma powodu, aby określać nazwy, faktycznie jest to błąd (przynajmniej w Pythonie 2.x, nie wiem o 3.x), nawet jeśli użyj nazw, których używa dokument, 'sep' i' maxsplit'. W związku z tym zauważ, że błąd mówi "* nie * argumenty słów kluczowych". – jez

+0

Huh. Działa w 3.x, więc pomyślałem, że będzie działać również w wersji 2.x. Zaktualizowano. – iCodez

+1

Jest również szczególnie ważne, aby zdezorientować nowych użytkowników o tym, że nie używają nazwy 'str', ponieważ' str.split' * does * istnieje jako metoda niezwiązana. Spodziewam się, że OP został poinformowany "oh, powinieneś użyć' str.split() '", który * jest * prawdziwy, ale może być źle wzięty .... – jez

1

Błąd stwierdza, że ​​nie można podać nazwanych argumentów do split. Trzeba zadzwonić split z zaledwie argumentów - bez nazw argumentów:

name,function,range,w,h,k,frac,constraint = str.split("&", 8) 
1

Podział robi się argumenty słów kluczowych str lub num. Zrób to zamiast tego:

name,function,range,w,h,k,frac,constraint = str.split('&', 8) 
Powiązane problemy