aurfal...@gmail.com wrote:
<div class="moz-text-flowed" style="font-family: -moz-fixed">Hi all,

I tried to make the subject as specific as possible rather then just "help me" or "its broke" or "my server is down", etc...

So please excuse me if its too specific as I wasn't trying to be ridiculous.

So I've been handed some one else's work to fix.

While its fun and all, I haven't had much luck in debugging this particular issue.

The error I get;

File "myscript.py", Line 18, in ?
projectpath = ourHome+"/etc/TEMPLATE"
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

Python 2.4.3

I've read were when passing a string to exec may need to end with a '\n'

I've tried a few diff variations on the below line 18 w/o luck. Any one mind helping out a bratha from anatha ... planet that is?

line 18;

projectpath = ourHome+"/etc/TEMPLATE"

line 17;
ourHome = os.environ.get('some_env')


Thanks in advance,
- aurf


Short answer: you (the program) don't have any such environment variable, and forgot to check for it, just implicitly assuming that it'll be present. When it isn't, the + doesn't make any sense.

Longer answer: When you get an error on a line, try to figure out which of the variables on the line might be in doubt, and look at them in your debugger. Since the error is complaining about operands to + you'd look at both the ourHome variable and the literal. And then you'd look, and see that ourHome is equal to None. Which is what the error said. Now you look at the last place which bound that variable and it's os.environ.get(). How can get() return a None? Answer: when there's no such variable.

As to how to fix it, you have to decide what behavior you want when the user doesn't have such a variable. Read the manual you wrote for the user, telling him to define it. If no such paragraph exists, then perhaps you intended a default value to be used, such as "/default/special" Add a paragraph to the manual, and a corresponding field to the get().

   ourHome = os.environ.get("some_env", "/default/special")

Now it'll always have a text value, either specified by the environment var, or /default/special.

Alternatively, you could catch the exception, print an error to the user, telling him exactly how to fix his environment, and exit. Of course, this assumes you do the check pretty early in the program's run.

DaveA

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to