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,867
  • 7
  • 38
  • 57
PyNEwbie
  • 4,882
  • 4
  • 38
  • 86

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
  • 854,459
  • 170
  • 1,222
  • 1,395
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
  • 7,179
  • 1
  • 29
  • 26
  • 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