2013-03-07 3 views
1

Мне нужно ввести список кодов http-ответов в конфигурацию моего приложения и вы хотите предоставить сокращенное значение python, чтобы они не отображали каждый отдельный код.Python Integer for loop 200 to 205

что-то вроде следующего:

class settings: 
    success_codes= 200..299  # successful request 
    retry_codes= 400..404,500-503 # retry later 
    fail_codes = 504,505,506  # don't retry again 

не Python поддерживает какой-то чистый синтаксис, как это определить диапазоны? Мне нужно несколько диапазонов.

ответ

5

ranges Использование в Python 2.x:

success_codes = range(200, 300) 
retry_code = range(400, 405) + range(500, 504) 
fail_codes = range(504, 507) 

И для справки, в Python 3.x (также работает в Python 2.x):

success_codes = list(range(200, 300)) 
retry_code = list(range(400, 405)) + list(range(500, 504)) 
fail_codes = list(range(504, 507)) 
+1

+1 хороший ответ. – hughdbrown

1

просто использовать диапазон функция:

vals = range(start, stop + 1) 
+0

'vals = range (start, stop + 1)', no? – hughdbrown

+0

Да, я всегда помню, что это так и подстраивалось. Будет обновлять ответ, хотя для ясности. – reptilicus

1

Это работает во всех версиях питона

class settings: 
    success_codes = list(range(200, 299 + 1)) # successful request 
    retry_codes = list(range(400, 404 + 1)) + list(range(500, 503 + 1)) # retry later 
    fail_codes = list(range(504, 506 + 1)) # don't retry again 

В более ранних версиях python list(range()) может быть заменен на range(). Кроме того, очевидно, вы можете напрямую добавить значение 1 в верхнее значение.

1

Использование диапазона (n, m + 1), как и многие люди, предлагает, работает. Однако вам нужно создать все возможные значения в памяти?

В большинстве случаев вы можете использовать:

if return_code < 200 or return_code >= 299: 
    do_something() 

Или:

if return_code in range(200, 299+1): 
    do_something() 
+0

да, так оно будет использоваться, но на основе конфигурации программы я хочу, чтобы они имели полный контроль над тем, когда программа должна повторять/повторять запрос, а когда нет. Я бы предпочел не жестко его кодировать. – dlite922

+0

В зависимости от того, сколько возможностей программирования вы ожидаете от людей, собирающихся настроить эту вещь, вы также можете сохранить вызываемые параметры и выполнить их как часть сравнения. – ferrix

+0

Я бы предпочел никакой логики в настройках, просто значения. Но это только я. большинство людей будут инженерами. – dlite922