В настоящее время я пишу скрипт на Python и пытаюсь динамически генерировать некоторые аргументы.Тем не менее выдается ошибка для следующего скрипта с указанием 'Namespace' object is not iterable.
Любые идеи о том, как исправить?
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 () не будет работать.
Редактировать: Обновлено с двумя исправлениями.Сначала исправьте ошибку выше, используя принятый ответ ниже.Во-вторых, также исправлена ошибка, при которой меня отмечали за попытку добавить один и тот же аргумент дважды.Исправлена ошибка, из-за которой аргументы становились множеством, а затем возвращались к списку.Теперь мой скрипт выполняется, но дополнительные аргументы не имеют никакого эффекта.Есть идеи?