UnicodeDecodeError issue

Ferrous Cranus nikos at superhost.gr
Sat Aug 31 09:07:01 EDT 2013


Στις 31/8/2013 3:58 μμ, ο/η Ferrous Cranus έγραψε:
> Στις 31/8/2013 2:28 μμ, ο/η Steven D'Aprano έγραψε:
>> On Sat, 31 Aug 2013 11:31:13 +0300, Ferrous Cranus wrote:
>>
>>> Here is the code inside files.py:
>>
>> The code you show is not the ENTIRE code inside of files.py, is it? You
>> are only showing us a small piece, correct?
>>
>> The code you show:
>>
>>> try:
>>>     gi = pygeoip.GeoIP('/usr/local/share/GeoIPCity.dat')
>>>     city = gi.time_zone_by_addr( os.environ['REMOTE_ADDR'] ) or
>>>       gi.time_zone_by_addr( os.environ['HTTP_CF_CONNECTING_IP'] )
>>>     host = socket.gethostbyaddr( os.environ['REMOTE_ADDR'] ) or
>>>       socket.gethostbyaddr( os.environ['HTTP_CF_CONNECTING_IP'] ) or
>>>       os.environ['REMOTE_ADDR']
>>> except Exception as e:
>>>     print( repr(e), file=open( '/tmp/err.out', 'w' ) )
>>
>>
>> does not contain a call to cur.execute. And here is your error:
>>
>>
>>> [error] [client 108.162.229.116] Traceback (most recent call last):,
>>> referer: http://superhost.gr/ [Sat Aug 31 08:29:33 2013] [error] [client
>>> 108.162.229.116]   File "/home/nikos/public_html/cgi-bin/files.py", line
>>> 135, in <module>, referer: http://superhost.gr/
>>> [Sat Aug 31 08:29:33 2013] [error] [client 108.162.229.116]
>>> cur.execute('''INSERT INTO files (url, host, city, lastvisit) VALUES
>>> (%s, %s, %s, %s)''', (filename, host, city, lastvisit) ), referer:
>>> http://superhost.gr/
>>> [Sat Aug 31 08:29:33 2013] [error] [client 108.162.229.116] NameError:
>>> name 'host' is not defined, referer: http://superhost.gr/
>>
>>
>> Extracting out the critical part:
>>
>> line 135
>> cur.execute('''INSERT INTO files (url, host, city, lastvisit) VALUES
>> (%s, %s, %s, %s)''', (filename, host, city, lastvisit) ),
>>
>> Where is the call to cur.execute in the code snippet you show above?
>>
>>
>>
>>> But 'host' defaults to an ip address if it cannot resolve the hostname.
>>> Why the errro says its undefined?
>>
>> Because it is is undefined. Python is not lying to you. If Python tells
>> you there is an error, BELIEVE IT. Resolving the hostname is irrelevant.
>>
>> print(host)  ### ERROR OCCURS HERE BECAUSE HOST IS UNDEFINED ###
>> host = socket.gethostbyaddr(addr)
> I'm not saying Python is lying of course it does not.
>
> But how is this possible since:
>
>
> host = socket.gethostbyaddr( os.environ['REMOTE_ADDR'] ) or
> socket.gethostbyaddr( os.environ['HTTP_CF_CONNECTING_IP'] ) or
> os.environ['REMOTE_ADDR']
>
>
> it must have a value by defaulting to something.
>
> The cur.execute fails because it make use of 'host' which is undefined.
>
>          # Try to insert the file into the database
>          cur.execute('''INSERT INTO files (url, host, city, lastvisit)
> VALUES (%s, %s, %s, %s)''', (filename, host, city, lastvisit) )
>
>
> And the question remain as to why 'host' is undefined.
Thsi fails too:

host = socket.gethostbyaddr( os.environ['REMOTE_ADDR'] )[0] or 
socket.gethostbyaddr( os.environ['HTTP_CF_CONNECTING_IP'] )[0] or 
"Unkknown host"

-- 
Webhost <http://superhost.gr>



More information about the Python-list mailing list