变量没有在python中的while循环中定义?

时间:2018-03-21 22:55:14

标签: python while-loop

我正在尝试在python中编写一个简单的程序来读取命令行参数并根据参数打印最终的单词。如果有任何形式的参数" -f ="那么遗嘱将转到最后印刷字的前面。同样地," -e ="文本转到后面,如果有-caps作为参数,那么最终打印的单词将全部为大写。我做一个while循环来扫描参数并检查这些标志。完整的代码是:

import sys 
i=1
while i<len(sys.argv):
    frnt_wrd = None
    lst_wrd = None 
    arg_1 = str(sys.argv[i])
    if arg_1.startswith('-f='):
        front = arg_1.split('=')
        frnt_wrd = front[1]

    elif arg_1.startswith('-e='):
        last = arg_1.split('=')
        lst_wrd = last[1]

    if arg_1.startswith('-caps'):
        caps = True

    else:
        word = arg_1
    i+=1
print (front)
print (frnt_wrd)

我后来有几个if语句根据frnt_wrd和lst_wrd是否不等于None(即已经为它们赋值)打印出来的单词,但没有打印出来。要检查我做的问题:

print (front)
print (frnt_wrd)

并且输出实际上给我前面作为所需的数组(当有一个形式的参数&#34; -f =&#34;但是即使我定义了,也将frnt_wrd返回为None:

frnt_wrd = front[1] 

当我在while循环之外输入这一行时,它确实有效,但为什么不在while循环中定义frnt_wrd?

编辑:完整的代码给我frnt_wrd为无上面。你还需要什么? 我想学习如何在没有argparse的情况下使用它。我需要理解为什么我要定义一个变量而它没有定义。

回溯: enter image description here

1 个答案:

答案 0 :(得分:0)

问题是您每次循环都会将frnt_wordlst_word重置为None,因此您将覆盖之前参数设置的值。你应该在循环之前初始化它们

frnt_word = None
lst_word = None
caps = False
word = None
for arg in sys.argv[1:]:
    optarr = arg.split("=")
    if optarr[0] == "-f":
        frnt_word = optarr[1]
    elif optarr[0] == "-e":
        lst_word = optarr[1]
    elif optarr[0] == "-caps":
        caps = True
    else:
        word = arg