2016-03-07 2 views
0

тренировки, если строка с номером версии выше, чем другая строка, держащей номер версии в Python 3.Является ли строка выше, чем другая строка в Python 3?

Это то, что я пытался:

request_version = "1.10.1" 
current_version = "1.11" 
if Decimal(request_version) > Decimal(current_version): 
    pass 

Однако, я получаю эту ошибку, почему?

InvalidOperation at /api/version/ 
[<class 'decimal.ConversionSyntax'>] 
+0

Пример youe работает для меня – Selcuk

+1

его фактически работает для меня ... – Netwave

+2

Нет, отлично работает: https://repl.it/BteN. Вы уверены, что не пытаетесь взять выпуск патча (например, '1.2.3') или что-то еще? Кроме того, обратите внимание, что выпуски не сравниваются численно - '1,2' менее свежий, чем« 1.11 », хотя, например, это большее число. – jonrsharpe

ответ

4

Вы пытаетесь преобразовать строку версии к поплавку, который терпит неудачу, потому что 1.2.3 не является допустимым поплавок.

То, что вы, вероятно, хотите, для такого рода вещей является packaging пакетом, который реализует PEP 440 версию семантики (среди других тонкостей):

>>> from packaging.version import parse 
>>> request_version = parse("1.10.1") 
>>> current_version = parse("1.11") 
>>> request_version > current_version 
False 
>>> request_version < current_version 
True 

Это parse создаст Version объекта, который позволяет проводить сравнение между версиями

1

Вы можете использовать LooseVersion из distutils.version:

from distutils.version import LooseVersion as V 

current = V('1.10.1') 
request_version = V('1.11') 

if current < request_version: 
    print("Yay.") 
Смежные вопросы