Более опрятный способ попытаться импортировать модуль из нескольких местоположений?

Я не думаю, что эта информация (код BIC / SWIFT) всегда присутствует в номере IBAN. Глядя на вики-статью IBAN , каждая страна имеет свой собственный стандарт, поэтому стандартизируются только префикс страны и контрольная сумма. Трейлинг и самая длинная часть всегда являются своего рода банковским маршрутизацией / кодом, соединенным с номером счета. Но проблема в том, что банковский маршрут / код предназначен для большинства стран, а не SWIFT-кода, т.е. не того, что вы ищете. Например, в Германии они используют BLZ, который всегда является цифрой (я думаю, 8 цифр) и 640 901 00 отображается в код BIC VBRTDE6RXXX, который не будет присутствовать в IBAN.

Что вы можете сделать:

  1. определить список стран, которые вам нужно поддерживать. Возможно, добавив больше стран позже
  2. , получите алгоритм для каждой страны из статьи вики выше
  3. . Сканируйте или найдите и скачайте где-нибудь сопоставление между кодом банка < -> BIC / SWIFT для этой страны , Посмотрите на этот ресурс
  4. код вашего алгоритма, чтобы отделить код банка от номера и сопоставить его с кодом BIC из шага 3.

10
задан CharlesB 25 February 2013 в 15:29
поделиться

3 ответа

Я нашел следующую функцию по http://mail.python.org/pipermail/python-list/2007-May/441896.html. Это, кажется, работает вполне хорошо, и я вполне уверен способ, которым его импорт не будет топать ни на каком существующем импорте, который Вы могли бы уже иметь.

def module_exists(module_name):
    try:
        mod = __import__(module_name)
    except ImportError:
        return False
    else:
        return True

if module_exists('simplejson'):
    import simplejson as json
elif module_exists('json'):
    import json
elif module_exists('django.utils'):
    from django.utils import simplejson as json
else:
    raise ImportError('Requires either simplejson, Python 2.6 or django.utils')

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

7
ответ дан 4 December 2019 в 00:27
поделиться
def import_any(*mod_list):
    res = None
    for mod in mod_list:
        try:
            res = __import__(mod)
            return res
        except ImportError:
            pass
    raise ImportError("Requires one of " + ', '.join(mod_list))

json = import_any('simplejson', 'json', 'django.utils.simplejson')
3
ответ дан 4 December 2019 в 00:27
поделиться

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

Я предлагаю, чтобы Вы придерживались его. Помните "ужасный", не всегда "плохо".

1
ответ дан 4 December 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: