Какие вещи должны быть локализованы в приложении

Кажется, проблема в том, что python не имеет какой-либо формы отложенной оценки

Ошибка ... да, но, возможно, не в той форме, которую вы ожидаете. Аргументы функции действительно перед вычислением передаются в функцию eval'd, поэтому

try_or_zero(foo.bar())

будут действительно выполняться следующим образом:

param = foo.bar()
try_or_zero(param)

Теперь функции Python являются простыми объектами (их можно использовать как переменные, передаваемые в качестве аргументов функциям и т. д.), и они вызываются только при применении оператора вызова (парены, с или без аргументов), так что вы можете передать функцию в try_or_zero и позволить try_or_zero вызвать функцию:

def try_or_zero(func):
    try:
        return func()
    except Exception as e:
        return 0

Теперь вы возразите, что 1 / это не сработает, если функция ожидает аргументы, а 2 / необходимость написать функцию только для этого - это PITA - и оба возражения верны. Надеемся, что в Python также есть ярлык для создания простых анонимных функций, состоящих из одного (даже если сколь угодно сложного) выражения: lambda. Кроме того, функции python (включая «лямбда-функции», которые, технически, являются простыми функциями) являются замыканиями - они захватывают контекст, в котором они определены, - так что довольно легко обернуть все это вместе:

a = 42
b = "c"

def add(x, y):
    return x + y

result = try_or_zero(lambda: add(a, b))
[ 1116] Дополнительное замечание об обработке исключений:

Сначала не используйте голое, кроме как минимум catch Exception (иначе вы можете помешать некоторому исключению - например, SysExit - работать как положено). 1117]

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

def try_or_zero(func, *exceptions):
    if not exceptions:
        exceptions = (Exception,)  
    try:
        return func()
    except exceptions as e:
        return 0


a = 42
b = "c"

def add(x, y):
    return x + y

result = try_or_zero(lambda: add(a, b), TypeError))

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

И, наконец: вы также можете добавить поддержку возвращаемого значения, отличного от нуля, в случае исключения (не все выражения должны возвращать int):

# XXX : python3 only, python2 doesn't accept
# keyword args after *args

def try_or(func, *exceptions, default=0):
    if not exceptions:
        exceptions = (Exception,)  
    try:
        return func()
    except exceptions as e:
        return 0

# adding lists is legit too,
# so here you may want an empty list as the return value
# instead
a = [1, 2, 3]
# but only to lists
b = ""

result = try_or(lambda: a + b, TypeError, default=[]))
6
задан soren.enemaerke 10 November 2008 в 10:57
поделиться

3 ответа

После разговора Кудзу о l10N я оставил комнату с путем большим количеством вопросов затем, я имел прежде и ни один из моих старых отвеченных вопросов. Но это дало мне что-то для размышления об и принесло сообщение, "зависит от того, как далеко Вы можете/хотите для движения" через.

  • Переведите текстовые тела с вышеупомянутыми вещами
  • Протестируйте все свои средства управления на длину/выравнивание в LTR/RTL, TTB (TopToBottom) BTT и все, что это - комбинации.
  • Высматривайте специальные символы и кодировку
  • Высматривайте комбинации различного выравнивания (LTR, RTL, TTB, BTT) и как они производят знаки цитаты и пунктуация.
  • Выровняйте средства управления согласно выравниванию текста (еврейская Победа имеет свое меню "Пуск" справа
  • Примите длины строки во внимание. Они могут переполниться на других языках.
  • Поместите маркировки в корректную сторону значков (LTR, TTB и т.д.)
  • Переведите средства управления выбором языка
  • Никакие тексты в изображениях (не может быть переведен),
  • Переведите ВСЕ (заголовки, логотипы, некоторые языки используют различные торговые марки, названия продукта и т.д.),
  • Делает регион, имеют 24:00, или 0:00 (изменяет/PM, который идет с ним также),
  • Делает использование региона,/PM или система 24:00
  • Какая система календаря они использование
  • Что цифра для какой часть даты (день, месяц, год во всех его комбинациях)
  • Постарайтесь не "копировать [число] файлы" эквиваленты. Некоторые регионы имеют различные правила об изменяющихся словах согласно количествам. (Это - чрезвычайно сложная тема, которую я уточню при желании),
  • Переведите предложения, не слова. Синтаксические правила являются слишком сложными, чтобы вставить Вашу бизнес-логику.
  • Не используйте флаги для регионов. Языки! = страны
  • Рассмотрите, какие языки / диалекты можно поддерживать (например, Индия имеет огромное количество языков),
  • Кодирование
  • Культурные правила (некоторые западные изображения, отображающие бизнес-женщину, могут быть близким наступлением в некоторых других культурах),
  • Высматривайте обобщения языка (например, начальная загрузка (Великобритания)! = начальная загрузка (США))

Это - те от вершины моей головы. Список просто продолжился и на...

6
ответ дан 16 December 2019 в 21:47
поделиться

Не забывайте издержки относительно преобразования всей документации и справочных файлов.

1
ответ дан 16 December 2019 в 21:47
поделиться

пара подсказок с моих дней приложений J2ME:

  1. не переводите отдельные слова, переводите целые фразы, даже если там соответствуют повторениям. Необходимо будет позже перевести на язык, где слова должны быть изменены по-другому в различных контекстах, и можно закончить с аналогом "цвета: зеленоватый"

  2. Right2Lelf включает нумерацию списков, выравнивание и альтернативные полосы прокрутки

  3. Арабские языки пишут ту же букву по-другому на основе окружения букв. Вы не можете только распечатать строку от символьного буфера, Вам будет нужно специальное управление для вывода их или поддержки от Вас платформа

  4. алфавитная сортировка ТРУДНА. Никакой собственный китайский язык никогда не мог объяснять меня правила, но они будут всегда определять неправильно отсортированные слова. Кажется, существует много опций отсортировать китайский язык. Я предполагаю, что другие языки могут иметь ту же проблему

1
ответ дан 16 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

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