InterruptedException является контролируемой исключительной ситуацией поэтому, к сожалению, Вы не можете просто проигнорировать его. В самых простых случаях Вы ничего не должны делать в пункте выгоды, потому что Вы уверены, что этого не произойдет.
От API
, Брошенного, когда поток ожидает, сон, или иначе приостанавливаемый в течение долгого времени и другой поток прерывает его с помощью метода прерывания в классе Поток.
Сделайте как , как показано здесь . Затем вы можете использовать слово, которое представляет правильное целое число.
Примерно так:
LOW = 0
NORMAL = 1
HIGH = 2
STATUS_CHOICES = (
(LOW, 'Low'),
(NORMAL, 'Normal'),
(HIGH, 'High'),
)
Тогда они все еще являются целыми числами в БД.
Использование будет thing.priority = Thing.NORMAL
Просто замените свои числа на удобочитаемые значения, которые вам нужны. Таким образом:
PRIORITIES = (
('LOW', 'Low'),
('NORMAL', 'Normal'),
('HIGH', 'High'),
)
Это делает его удобочитаемым, однако вам придется определять свой собственный порядок.
Я бы, вероятно, установил диктат обратного просмотра раз и навсегда, но если бы я этого не сделал, я бы просто использовал:
thing.priority = next(value for value, name in Thing.PRIORITIES
if name=='Normal')
, что кажется проще, чем создание диктата на лети, чтобы снова выбросить; -).
Вот тип поля, который я написал несколько минут назад и который, как мне кажется, делает то, что вы хотите. Его конструктору требуется аргумент choices, который может быть либо кортежем из двух кортежей в том же формате, что и параметр choices для IntegerField, либо вместо этого простым списком имен (например, ChoiceField (('Low', 'Normal', 'High'), по умолчанию = 'Low')). Класс позаботится о преобразовании строки в int за вас, вы никогда не увидите int.
class ChoiceField(models.IntegerField):
def __init__(self, choices, **kwargs):
if not hasattr(choices[0],'__iter__'):
choices = zip(range(len(choices)), choices)
self.val2choice = dict(choices)
self.choice2val = dict((v,k) for k,v in choices)
kwargs['choices'] = choices
super(models.IntegerField, self).__init__(**kwargs)
def to_python(self, value):
return self.val2choice[value]
def get_db_prep_value(self, choice):
return self.choice2val[choice]