2017-12-07 21 views
-1

私はPythonを初めて使用しています。私はExcelテーブルのnull値を検出し、変数statに "Fail"を渡す関数を呼び出す必要があります。上記のコード Python関数の引数:NameError argumantが定義されていません

def checkBlank(tb): 
    book=xlrd.open_workbook(reportFile) 
    sheet = book.sheet_by_name(tb) 
    s= "Pass" 
    for i in range(sheet.nrows): 
     row = sheet.row_values(i) 
     for cell in row:     
      if cell =='': 
       s="Fail" 
    return s 
print checkBlank('Sheet1') 

は返す を「失敗」が、コードの下に与えるでしょう:NameError:名「STAT」が定義されていない

def checkBlank(tb,stat): 
    book=xlrd.open_workbook(reportFile) 
    sheet = book.sheet_by_name(tb) 
    s= "Pass" 
    for i in range(sheet.nrows): 
     row = sheet.row_values(i) 
     for cell in row:     
      if cell =='': 
       s="Fail" 
print checkBlank('Sheet1', stat) 
print stat 

がどのように機能を発見した場合のstatために「失敗」を割り当てることができます空のセル?

+0

下線が 'print checkBlank( 'Sheet1')' –

+1

であるので、_is_ 'stat'が定義されていますか?私はあなたのコードでそれを見ることができません。また、関数には1つのパラメータしかありません。 –

+0

修正:def checkBlank(tb、stat): – Yun

答えて

1

戻り値として使用する関数に変数を渡そうとしているようです。これはPythonicではなく、一般的に動作しません。代わりに、あなたの関数は値を返す必要があり、その値を新しい "変数"に割り当てるべきです。

def function(arg): 
    if arg: 
     return 'Pass' 
    else: 
     return 'Fail' 

status = function(False) 
print(status) # 'Fail' 

Pythonでは、あなたは我々が持っているもの、変数は、彼らが代わりにCでやるのと同じようにPythonで存在しないため、参照することによって呼び出す関数を記述しようとする必要はありませんの名前は、プレースホルダに似ており、オブジェクトを取得するために使用できます。 This articleと他の多くのスタックオーバーフローの答えがこれに深く入ります。

+0

ありがとうございます!私は20のテーブルに同じ機能を適用する必要があり、いくつかのテーブルには2つの機能が追加されるため、stat1 ....... stat20は毎回変更されます。コードを単純にしたかっただけです。もし私がC言語と同じことをすることができないのであれば、私には不便なようです。 – Yun

+0

@Yun辞書やリストの使い方を考えてみてください! 'stat [1] = function1()'、 'stat [2] = function2()'など... –

+0

恐ろしいです!しようとします。 – Yun

関連する問題