2010-07-30 55 views
2

我正在讀取一百多萬個文件來刪除一些數據。這些文件通常非常統一,但偶爾會出現問題,我預期會發現某些內容不存在。在Python中測試變量存在的最佳方法

例如,我期待一些SGML代碼來識別一個值,我需要

for data_line in temp #temp is a list of lines from a file 
    if <VARIABLENAME> in data_line: 
     VARIABLE_VAL=data_line.split('>')[-1] 

後來我用VARIABLE_VAL。 但我有時會得到一個異常:有

<VARIABLENAME>theName 

爲了解決這個問題我已經加入這一行的所有線路都已經被處理之後的文件中沒有行:

try: 
    if VARIABLE_VAL: 
     pass 
except NameError: 
    VARIABLE_VAL=somethingELSE 

我在什麼地方見過(但我不能再找到它)的解決方案,看起來像

if not VARIABLE_VAL: 
    VARIABLE_VAL=somethingELSE 

任何幫助,將不勝感激

回答

7

只是在循環之前您的變量初始化爲它的默認值:

VARIABLE_VAL = somethingELSE 
for dataline in temp: ... 

這樣,VARIABLE_VAL將除非約束它的初始默認值保持在循環中別的東西,你不需要怪異測試任何保證那。

+0

感謝亞歷克斯,所以給你答曰我想象中的結構是正義的,想象 – PyNEwbie 2010-07-30 02:12:05

2

亞歷克斯的解決方案是正確的。但是爲了以防萬一你想測試一個變量存在,請嘗試:

if 'VARIABLE_VAL' in locals(): 
    .... 
+0

樣,如果「VARIABLE_VAL」什麼不當地人() - 這是一個很好的答案,因爲現在我有一些新的東西可以玩。我的意思是,現在我開始瞭解當地人是什麼,並且能夠爲我做些什麼非常感謝。 – PyNEwbie 2010-07-30 02:21:01

+0

還有globals(),其中包含來自全局命名空間的變量。看看這裏的一些更多的信息:http://www.faqs.org/docs/diveintopython/dialect_locals.html 祝你好運! – catchmeifyoutry 2010-07-30 02:30:44

+0

非常感謝,這真的很整潔,我看到它值得一些戳動 – PyNEwbie 2010-07-30 02:35:39

相關問題