Модификаторы оператора форматирования не работают в скрипте Python 3 - PullRequest
0 голосов
/ 01 августа 2011

этот кусок кода сводит меня с ума. Я пытаюсь распечатать список справки для программы, которую я пишу. Поэтому я определяю словарь, где ключи - это слова, которые пользователь может захотеть уточнить, а значения - описания слов. Затем я использую цикл for... in..., чтобы распечатать все это. Проще говоря:

ERROR = '\x1B[1;31m ERROR!! \x1B[0m'
WARNING = '\x1B[1;33m WARNING! \x1B[0m'
SUCCESS = '\x1B[1;32m Operation successful! \x1B[0m'
ABORTED = '\x1B[1;33m Operation aborted! \x1B[0m'
help_descriptions = {'\x1B[34m NUMBERS \x1B[0m':'are the options you can take.',\
                 ERROR:'means you ran into and error and the program can\'t go on.',\
                 WARNING:'means that the data you entered might cause problems.',\
                 SUCCESS:'means that no run-time errors where encoutered.',\
                 ABORTED:'means you aborted a previous option, deleting\n the data associated.'}
def HelpMe():
print(70 * '~')
print(' HELP')
print(70 * '~')
for key in help_descriptions.keys():
    print('%10s %s' % (key, help_descriptions.get(key)))
print(70 * '~')

Единственное, что не работает - это токен %10s. Я имею в виду, что он печатает значение ключа, но не ставит лишние пробелы, если это необходимо. Я пытался запустить в интерактивном разделе этот кусок кода

print('%10s' % 'foo')

и вывод правильный.

Кто-нибудь из вас имеет представление о том, как заставить это работать?

Дополнительная информация: Я работаю Python 3 на машине с Linux под управлением Ubuntu 11.04 . Этот код является частью пользовательского модуля, который я написал для хранения статического текста или простых функций, которые печатают текст. Поэтому я импортирую этот модуль в основное приложение, он не является автономным.

Заранее спасибо.

1 Ответ

3 голосов
/ 01 августа 2011

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

  1. Увеличивать ширину поля до тех пор, пока вы не получите желаемую ширину (поскольку все они, похоже, содержат одинаковое количество escape-символов, это может сработать).
  2. Удалите escape-символы и используйте результат для заполнения.
  3. Вставьте метки (например, "ПРЕДУПРЕЖДЕНИЕ!") До правильной ширины поля перед добавлением escape-символов.

Любой из них должен достичь желаемого эффекта.

...