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

0

2 Answers 2

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks Alex, so given that you gave the answer the construct I imagined was just that, imagination
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():
    ....

3 Comments

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.
There is also globals() which contains variables from the global namespace. Take a look here for some more info: faqs.org/docs/diveintopython/dialect_locals.html Good luck!
Thanks a lot, that is really neat and I see that it deserves some poking around

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.