Python中检测变量是否存在的最佳方法

4
我正在读取一百万个文件以获取一些数据。这些文件通常是相对统一的,但偶尔会出现一些问题,例如我期望找到的内容没有出现。
例如,我期望某些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

任何帮助都将不胜感激

2个回答

9

在循环之前将变量初始化为其默认值:

VARIABLE_VAL = somethingELSE
for dataline in temp: ...

这样,VARIABLE_VAL 将保留其初始默认值,除非在循环内绑定到其他值,您无需进行任何奇怪的测试来确保这一点。


谢谢Alex,所以考虑到你给出的答案,我想象中的构造只是想象而已。 - PyNEwbie

4

Alex的解决方案是正确的。但是如果你确实想测试一个变量是否存在,可以尝试以下方法:

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

如果'VARIABLE_VAL'不在locals()中怎么办 - 这是一个很好的答案,因为现在我有了新的东西可以玩。我的意思是现在我可以学习locals能为我做什么。非常感谢。 - PyNEwbie
还有一个globals()函数,其中包含全局命名空间中的变量。在这里查看更多信息:http://www.faqs.org/docs/diveintopython/dialect_locals.html 祝你好运! - catchmeifyoutry
非常感谢,这真的很棒,我可以看到它值得一些探索。 - PyNEwbie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接