W pythonie 3.x keys()
, values()
i items()
return views. Teraz, podczas gdy widoki z pewnością mają advantages, wydają się powodować pewne problemy ze zgodnością. Na przykład z matplotlib
(ostatecznie jest to z numpy
). Na przykład, odpowiedzi na pytania dotyczące stosu zmiennych na poziomie this i this działają dobrze z pythonem 2.x, ale podnoszą wyjątek podczas wykonywania ich w pythonie 3.4.Obiekty widoku języka Python 3.x i matplotlib
Minimalny Przykładem może być:
import matplotlib.pyplot as plt
d = {1: 2, 2: 10}
plt.scatter(d.keys(), d.values())
co podnosi TypeError: float() argument must be a string or a number, not 'dict_values'
z Pythona 3.4.
Choć na minimalnym przykład Wyjątkiem jest całkiem jasne, powstaje pytanie this z powodu tego samego problemu i tutaj wyjątkiem jest dużo mniej oczywiste: TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Jaka jest najlepsza praktyka, aby poradzić sobie z tym problemem? Czy możemy mieć nadzieję, że w nowej wersji matplotlib
(lub ostatecznie numpy
) ten problem zostanie rozwiązany, czy powinniśmy zacząć pisać takie rzeczy jak list(dict.values())
podczas korzystania z matplotlib
tylko po to, aby nie napotkać problemów z python 3.x?
Jest to bardzo interesujący punkt, ale pytanie jest prawie całkowicie kwestia opinii. Podnosiłbym go z deweloperami matplotlib/zgłosiłem problem na githubie. Wydaje mi się, że twoje obejście wygląda na rozsądne (tzn. Stwórz listę z wartości), ale ostatecznie poprawka matplotlib/numpy byłaby miła. Niestety nie sądzę, aby pytanie pasowało do formatu przepełnienia stosu lub zasad dotyczących pytań opartych na opiniach. –
@JRichardSnape: Na pewno masz rację, ponieważ to pytanie jest dla większości z nas oparte głównie na opiniach. Jeśli chodzi o to, jak sobie poradzić z sytuacją taką, jaka jest obecnie, to jest kwestia gustu i nie jest to bardzo istotne pytanie, jeśli chodzi o to, czy i jak problem ten zostanie rozwiązany przez "numpy" lub 'matplotlib' faceci, ma to niewiele wspólnego z osobistą opinią. Więc nie zgadzam się z tobą tutaj. – jojo
Pewnie, ale domyślam się, że mówię, że przeciętny autor odpowiedzi nie może powiedzieć, co autorzy biblioteki zamierzają zrobić (jeśli w ogóle). W każdym razie, domyślamy się, czy pojawi się dev, który może odpowiedzieć na tę część. –