В настоящее время я пишу сценарий Python и пытаюсь динамически генерировать некоторые аргументы. Однако для следующего сценария возникает ошибка, в которой говорится, что объект «Пространство имен» не может быть повторен.
Есть идеи, как исправить?
import argparse
from os import path
import re
replacements = {}
pattern = '<<([^>]*)>>'
def user_replace(match):
## Pull from replacements dict or prompt
placeholder = match.group(1)
return (replacements[placeholder][0]
if placeholder in replacements else
raw_input('%s? ' % placeholder))
def main():
parser = argparse.ArgumentParser()
parser.add_argument('infile', type=argparse.FileType('r'))
parser.add_argument('outfile', type=argparse.FileType('w'))
required, extra = parser.parse_known_args()
infile, outfile = required.infile, required.outfile
args = re.findall(pattern, infile.read())
args = list(set(args))
infile.seek(0)
parser = argparse.ArgumentParser()
for arg in args:
parser.add_argument('--' + arg.lower())
replacements = vars(parser.parse_args(extra))
matcher = re.compile(pattern)
for line in args.infile:
new_line = matcher.sub(user_replace, line)
args.outfile.write(new_line)
args.infile.close()
args.outfile.close()
if __name__ == '__main__':
main()
Ошибка связана с возвращенным значением parser.parse_known_args (). Есть идеи, как я могу это обойти? Кто-то предложил создать объект и использовать интерфейс dict , но я не знаю, что именно это влечет за собой. Я новичок в Python, поэтому не понимаю, почему (infile, outfile), extra = parser.parse_known_args () не работают.
Edit: Обновлено с двумя исправлениями. Сначала исправил ошибку выше, используя принятый ответ ниже. Во-вторых, также исправлена ошибка, из-за которой меня помечали за попытку добавить один и тот же аргумент дважды. Исправлено преобразованием аргументов в набор, а затем обратно в список. Теперь мой скрипт выполняется, но необязательные аргументы не действуют. Есть идеи?