4

I am reading a million plus files to scrape out some data. The files are generally pretty uniform but there are occasional problems where something that I expected to find is not present.

For example, I expect some sgml code to identify a value I need

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]

Later on I use VARIABLE_VAL. But I sometimes get an exception: no line in the file that has

<VARIABLENAME>theName

To handle this I have added this line after all the lines have been processed:

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

I have seen somewhere (but I can't find it anymore) a solution that looks like

if not VARIABLE_VAL:
    VARIABLE_VAL=somethingELSE

Any help would be appreciated

Asciiom
  • 9,729
  • 7
  • 37
  • 57
PyNEwbie
  • 4,766
  • 3
  • 35
  • 83

2 Answers2

9

Just initialize your variable to its default value before the loop:

VARIABLE_VAL = somethingELSE
for dataline in temp: ...

this way, VARIABLE_VAL will keep its initial, default value unless bound to something else within the loop, and you need no weird testing whatsoever to ensure that.

Alex Martelli
  • 811,175
  • 162
  • 1,198
  • 1,373
4

Alex's solution is correct. But just in case you do want to test if a variable exists, try:

if 'VARIABLE_VAL' in locals():
    ....
catchmeifyoutry
  • 6,971
  • 1
  • 28
  • 25
  • What about if 'VARIABLE_VAL' not in locals() - this is a great answer because now I have something new to play with. I mean now I get to learn what locals is and can do for me Thanks a lot. – PyNEwbie Jul 30 '10 at 02:21
  • There is also globals() which contains variables from the global namespace. Take a look here for some more info: http://www.faqs.org/docs/diveintopython/dialect_locals.html Good luck! – catchmeifyoutry Jul 30 '10 at 02:30
  • Thanks a lot, that is really neat and I see that it deserves some poking around – PyNEwbie Jul 30 '10 at 02:35