Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3在函数中定义变量_Python_Function - Fatal编程技术网

Python3在函数中定义变量

Python3在函数中定义变量,python,function,Python,Function,我正在编写自己的代码来加密/解密消息,一切正常。现在我只是想整理一下代码,我还想添加错误捕获。我想在一个函数中捕获这个错误,这样我就不必在一个代码块中键入6次错误捕获 c = 1 list = ['Y', 'N'] test1 = "H" def f(test1): while c == 1: try: test1 = raw_input("Input something yo")

我正在编写自己的代码来加密/解密消息,一切正常。现在我只是想整理一下代码,我还想添加错误捕获。我想在一个函数中捕获这个错误,这样我就不必在一个代码块中键入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”作为用户输入。我希望a调用函数f,然后test1是变量名。我希望在函数运行后,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
回溯(最近一次呼叫最后一次):
文件“FuncTest.py”,第19行,在
a(测试1)
NameError:未定义名称“test1”

有没有办法解决这个问题?提前谢谢大家!:D

在删除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

您可能希望尝试不同的返回值,而不是引发错误。不确定官方的智慧是什么,但从易于重用的角度来看,返回元组可能更容易处理,并且避免在验证函数中定义错误(即,您可能希望根据所处程序的不同部分进行不同的处理).

为什么要将值传递给函数,然后立即丢弃它?将原始输入移到函数调用之外并传递,或者删除传递参数的要求。现在你正在传递一个未定义的变量作为参数,因此你的错误。基思,我不知道你的意思。我知道有点乱,我会把它清理干净,但现在这只是一个测试。我只想知道如何返回值test1并将其设为a,因此如果a为“Y”,它将打印“是”,否则它将打印“否”。它似乎没有返回值,因为它总是打印“否”。您将得到一个test1未定义错误,因为您正在删除它的定义。(示例的第3行)。看到我更完整的答案了吗?我不在手机上