From: Dave Luzius on
Pleaser help me with this. Here's a copy of the program, but it keeps
calling for me to define pressure.

# A small program to fetch local barometer reading from weather.com
# and convert the value from metric to
imperial.
# My first attempt at Python.
#--------------------------------------------------------------------
import urllib

# next line does the fetching
urllib.urlopen("http://xoap.weather.com/weather/local/USMI0060", pressure)

# next line does the conversion to imperial
imppress = 0.029875 * float(pressure)

# next line shows the results.
print imppress

as you can see, I'm stuck on what should be relatively simple.
TIA, Dave
From: Steven D'Aprano on
On Sat, 08 May 2010 18:52:33 +0000, Dave Luzius wrote:

> Pleaser help me with this. Here's a copy of the program, but it keeps
> calling for me to define pressure.

That's because you haven't defined pressure.

When Python tells you there is a bug in your program, it is almost always
correct.


> # A small program to fetch local barometer reading from weather.com
> # and convert the value from metric to imperial.
> # My first attempt at Python.
> #--------------------------------------------------------------------
> import urllib
>
> # next line does the fetching
> urllib.urlopen("http://xoap.weather.com/weather/local/USMI0060",
> pressure)

What is pressure? It is an undefined name. Where does pressure get its
value from?





--
Steven
From: Dave Luzius on
On Sat, 08 May 2010 19:02:42 +0000, Steven D'Aprano wrote:

> On Sat, 08 May 2010 18:52:33 +0000, Dave Luzius wrote:
>
>> Pleaser help me with this. Here's a copy of the program, but it keeps
>> calling for me to define pressure.
>
> That's because you haven't defined pressure.
>
> When Python tells you there is a bug in your program, it is almost
> always correct.
>
>
>> # A small program to fetch local barometer reading from weather.com #
>> and convert the value from metric to imperial. # My first attempt at
>> Python.
>> #--------------------------------------------------------------------
>> import urllib
>>
>> # next line does the fetching
>> urllib.urlopen("http://xoap.weather.com/weather/local/USMI0060",
>> pressure)
>
> What is pressure? It is an undefined name. Where does pressure get its
> value from?

Pressure is a term for barometric pressure, and is understood by Conky,
which this program is designed to work with, and is understood by
weather.com. But the value it passes to conky is metric, and I want it to
display in imperial.

What should I do....
From: Walter Brameld IV on
Dave Luzius wrote:
> On Sat, 08 May 2010 19:02:42 +0000, Steven D'Aprano wrote:
>
>> On Sat, 08 May 2010 18:52:33 +0000, Dave Luzius wrote:
>>
>>> Pleaser help me with this. Here's a copy of the program, but it keeps
>>> calling for me to define pressure.
>> That's because you haven't defined pressure.
>>
>> When Python tells you there is a bug in your program, it is almost
>> always correct.
>>
>>
>>> # A small program to fetch local barometer reading from weather.com #
>>> and convert the value from metric to imperial. # My first attempt at
>>> Python.
>>> #--------------------------------------------------------------------
>>> import urllib
>>>
>>> # next line does the fetching
>>> urllib.urlopen("http://xoap.weather.com/weather/local/USMI0060",
>>> pressure)
>> What is pressure? It is an undefined name. Where does pressure get its
>> value from?
>
> Pressure is a term for barometric pressure, and is understood by Conky,
> which this program is designed to work with, and is understood by
> weather.com. But the value it passes to conky is metric, and I want it to
> display in imperial.
>
> What should I do....

You're passing in the value of pressure as the 'data' parameter to
urllib.urlopen. So...what is the value of pressure? You haven't
assigned any value to it before calling urlopen. Therein lies the problem.
From: Benjamin Kaplan on
On Sat, May 8, 2010 at 3:13 PM, Dave Luzius <dluzius(a)comcast.net> wrote:

>
> Pressure is a term for barometric pressure, and is understood by Conky,
> which this program is designed to work with, and is understood by
> weather.com. But the value it passes to conky is metric, and I want it to
> display in imperial.
>
> What should I do....
> --

Don't tell us what pressure is. Tell Python.

>>> urllib.urlopen("http://xoap.weather.com/weather/local/USMI0060", pressure)

What do you think this line does? Because it does absolutely nothing.
Assuming pressure is defined It creates a file-like object connected
to that URL. But because that file-like object is never assigned to
anything, it's reference count drops to 0 and it's immediately closed
and deleted.

You have to
1) Assign the file-like object to some name.
2) Read the data from the file-like object
3) convert the string you read from the file-like object into a float
4) use the float to do math

Python is succinct, but it isn't magic. Just like every other
programming language, it can't guess what you want it to do.