簡體   English   中英

Python 3 在函數中定義變量

[英]Python 3 defining a variable within a 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”作為用戶輸入。 我想要 a 調用函數 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

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

您可能希望嘗試不同的返回值而不是引發錯誤。 不確定官方的智慧是什么,但從易於重用的角度來看,返回元組可能更容易處理並節省在驗證函數中定義錯誤(即,您可能希望根據程序的不同部分對其進行不同的處理)重新進入)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM