Wpis z mikrobloga

Głupie, może prostackie pytanie z programowania o którym nie mam pojęcia. Mam gotowy skrypt, który wykona się, gdy wersja obecnego oprogramowania jest w wersji 6.7.1 lub wyższej. Na 6.8 wykonuje się bez problemu, jednak na 6.10 już nie. W skrypcie jest taki fragment:

version = version_utils.get_cluster_version(numeric=True)
if not ("master" in version or version >= '6.7.1'):

czy wg. logiki pythona "6.10" >= "6.7.1"?
#programowanie #python
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@bachus: na moje oko on tu nie porównuje "wartości" liczb, a ich kolejność alfabetyczną. Stąd jak przechodzi do porównania trzeciego znaku, to uznaje, że 1 jest mniejsze niż 7, więc sprawdzany warunek nie jest prawdą
  • Odpowiedz
  • 0
@bachus from pkgresources import parseversion

version = versionutils.getclusterversion(numeric=True)
if not ("master" in version or parse
version(version) >= parse_version('6.7.1')):
  • Odpowiedz
  • 0
@m_ba: cześć, to skrypt od vendora, ja tego nie chcę poprawiać - czyli Twoim zdaniem warunek nie jest spełniony? Wiadomo, ja tam sobie mogę podstawić or 1=1, chodzi mi o samo to czemu skrypt się nie wykonuje.
  • Odpowiedz
chodzi mi o samo to czemu skrypt się nie wykonuje.


@bachus: skrypt się nie wykonuje, bo ktoś błędnie zapisał sprawdzanie wersji. Tak samo "10.0" nie spełniłoby warunku >= "6.7.1"
  • Odpowiedz
@bachus: tak dla szerszego wyjaśnienia - "6.7.1" zapisane w takiej formie, z punktu widzenia Pythona to jest zwykły tekst. On sam z siebie nie wie w jakim formacie jest zapisany ten numer wersji, ani że w ogóle są tutaj jakiekolwiek cyfry.

Porównując dwa ciągi tekstowe operatorami <, >, =, porównywane są wartości ASCII poszczególnych znaków. Przykładowo, w Twoim przypadku porównując "6.10" i "6.7.1":
6 == 6
"." == "."
1
  • Odpowiedz
wykomentowalem if-a, skrypt zadziałał

@bachus: Świetny pomysł. Do momentu przeniesienia na produkcję, gdzie będzie np. wersja 6.7.0. :-))
Ale co tam, niech ktoś inny się męczy.
Pamiętaj, żeby nigdy, przenigdy nie zostawiać w gicie śladu po sobie jak dodasz taki kod.
Dam ci jeszcze jedną radę: nie baw się w rządną obsługę wyjątków, tu masz przykład dobrych
  • Odpowiedz