2010-07-30 56 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

相关问题