Я пытаюсь переписать мой lib, написанный на PHP, в python. Он обрабатывает все запросы сфинкса. В функции init я пытаюсь установить режимы поиска по умолчанию и соответствия, но у меня возникла небольшая проблема. Я получаю режимы из файла конфигурации.Ошибка утверждения Python, преобразование строки в int
В PHP, вы должны использовать константу в качестве входного сигнала:
$this->sphinx->SetMatchMode(constant($this->conf['match_mode']));
Это будет преобразовать строку из конфигурационного файла в константу, и все работает. Хитрая часть начинается в Python, когда я пытаюсь сделать это:
self.sphinx.SetMatchMode(self.config['match_mode'])
я получаю:
AssertionError in
assert(mode in [SPH_MATCH_ALL, SPH_MATCH_ANY, SPH_MATCH_PHRASE, SPH_MATCH_BOOLEAN, SPH_MATCH_EXTENDED, SPH_MATCH_FULLSCAN, SPH_MATCH_EXTENDED2])
В этом случае вход должен быть целым числом, но вход является строкой, и я can not конвертировать его, потому что я получаю исключение - строка SPH_MATCH_ALL
.
invalid literal for int() with base 10: 'SPH_MATCH_ALL'
Когда я пытаюсь это:
print type(self.config['match_mode']) # -- string
print type(SPH_MATCH_ALL) # -- integer
print SPH_MATCH_ALL # -- 1
print SPH_MATCH_ANY # -- 0
Так что мой вопрос будет, как я могу преобразовать строку в целое число или что-то думает, что это, так что я не получите ошибку утверждение. Конечно, я мог бы просто делать какие-то утверждения if/else, но я этого не хочу. Есть ли элегантный способ сделать это?
Почему бы просто не держать константы в dict и использовать это? – Daenyth