2015-04-07 30 views
0

在全面的上下文中,我有一個.csv文件,我正在讀取數據,然後我想知道有多少行存在於文件。python - for循環中的變量就好像它不存在一樣

我已經嘗試這樣做,與此代碼:

for row in CharsDict: 
    IDsQuant = sum(1 for row in CharsDict) 
IDsQuant = int(IDsQuant) 

但每當我嘗試做一些與變量IDsQuant(就像上面IDsQuant = INT(IDsQuant)),它給了我這個錯誤:

UnboundLocalError: local variable 'IDsQuant' referenced before assignment 

我該如何解決這個問題?

在此先感謝。

+0

在你的循環'IDsQuant = 0'之前定義它。如果你沒有在循環內的範圍內定義它,那就是你收到錯誤的原因。 – Cfreak

+0

@Cfreak不認爲有幫助,如果該變量沒有按照for循環設置,那麼每次只會得到一個0(錯誤)的回答。也沒有必要,因爲你沒有做'+ ='或者其他需要它的東西。 – Marius

+2

使用兩個for循環有什麼用處,似乎IDsQuant每次都會得到相同的值 –

回答

0

看來,這

for row in CharsDict: 
    IDsQuant += 1 
IDsQuant = int(IDsQuant) 

是較爲有效和有用比

for row in CharsDict: 
    IDsQuant = sum(1 for row in CharsDict) 
IDsQuant = int(IDsQuant) 

我似乎用這種替代獲得沒有更多的錯誤。 感謝您的幫助!

0

您還沒有定義CharsDict在您的示例中,也不知道您如何閱讀文件。

如果您的「讀取」返回一個數組 - 行,那麼只有行數將是len(行)。

如果OTOH正在遍歷一個迭代,則可以在迭代開始之前增加一個設置爲零的計數。

2

由於循環不會在Python中創建新的作用域,因此您認爲代碼應該正常工作是正確的。

但是,如果由於某種原因(例如CharsDict爲空容器)而未執行循環的主體,則將不會創建IDsQuant變量,從而生成所見的錯誤。

下面的代碼顯示了這種情況的例子---相同的代碼,運行不同的參數。在示例函數的第二次調用中,循環將不會運行,重現您所擁有的情況,並出現相同的錯誤。

def test_scope(n_loops):              
    for i in range(n_loops):              
     variable = i               
    return variable               


if __name__ == '__main__':             
    print('First test:', test_scope(1))          

    print('Empty loop:', test_scope(0))