Python 3在函数中定义变量

时间:2016-09-25 10:45:27

标签: python function

我正在使用自己的代码加密/解密消息,一切正常。现在我只是想稍微整理代码,我也试图添加错误捕获。我希望在函数中捕获此错误,因此我不必在一个代码块中输入错误捕获次数为6次。

c = 1
list = ['Y', 'N']
test1 = "H"

def f(test1):
    while c == 1:
            try:
                    test1 = raw_input("Input something yo")
                    if test1 not in list:
                            raise ValueError("Enter Y or N")
                    else:
                            return test1 
                            break
            except ValueError as error:
                    print (error)

a = f
a(test1)

a = test1
print (a)
if a == "Y":
    print ("Yes")
else:
    print ("No")

这是练习这样做的一项测试。但是,我无法成功地做到这一点。所以,在这段代码中,我想将a定义为" Y"或" N"作为用户输入。我想要一个调用函数f然后test1是变量名。我希望在函数运行后成为test1。因此,如果该功能正在运行且用户输入" Y",那么"是"将被打印。如果没有,那么"否"将被打印。对于我的实际脚本,我需要将多个值定义为此函数的返回值,因为我不想多次输入错误捕获过程。如果用户没有键入" Y"或" N"然后他们必须再次键入它,以便该部分有效。它只是返回了我遇到问题的值test1。

目前,test1总是" H"但如果我没有这条线,我就会收到这个错误:

Traceback (most recent call last):
    File "FuncTest.py", line 19, in <module>
        a(test1)
NameError: name 'test1' is not defined

我有什么想法可以解决这个问题?在此先感谢大家! :d

1 个答案:

答案 0 :(得分:0)

当您删除test1的定义时删除示例的第3行时出现错误。

将值传递给函数以便返回它们是不必要的,相同代码的更一般应用如下:

def wait_and_validate (validation_list):
    while True:
        the_input= raw_input("Input something yo")
        if the_input not in validation_list:
            raise ValueError("Input not In Validation List")
        return the_input
try:
    valid_input = wait_and_validate(['Y', 'N'])
except ValueError as error:
    print(error)
#do stuff with valid_input

您可能希望尝试不同的返回值而不是引发错误。不知道官方的智慧是什么,但是从易于重用的角度来看,返回一个元组可能更容易处理并且可以在验证函数中保存定义错误(也就是说,你可能希望以不同的方式处理它,具体取决于你的程序部分)重新开始。