Handling 3 operands in an expression without raising an exception

Νίκος nikos.gr33k at gmail.com
Sat Sep 28 05:33:56 EDT 2013


Στις 28/9/2013 1:26 πμ, ο/η Dave Angel έγραψε:
> On 27/9/2013 18:06, Νίκος wrote:
>
>
>>
>> city = "Άγνωστη Πόλη"
>> host = "Άγνωστη Προέλευση"
>>
>> If they were to have the same string assigned to them it should be okey
>> but they do not.
>>
>> Or perhaps you can even still think of writing the above into 1-liner
>> whatsoever!
>
> I already did earlier in this thread.  And you must have read the
> message, because you replied to other parts of it.  it's the one where I
> referred to code golf, and to APL.  About 12 hours ago, at 6:43 my time.
>
> city, host = "Άγνωστη Πόλη", "Άγνωστη Προέλευση"
>
> I still think it's foolish, but be my guest.

Perhaps i wasn't clear when i expresses my self.

Sure the 1-liner you provided assign different strings to each variable 
respectively, which is nice, but i was referring to have 1-liner that 
had the ability to assign the appropriate string to the variable that 
failed to get a value.

ipval = ( os.environ.get('HTTP_CF_CONNECTING_IP') or 
os.environ.get('REMOTE_ADDR', "Cannot Resolve") )
try:
	gi = pygeoip.GeoIP('/usr/local/share/GeoIPCity.dat')
	city = gi.time_zone_by_addr( ipval )
	host = socket.gethostbyaddr( ipval ) [0]
except socket.gaierror as e:
	city = "Άγνωστη Πόλη"
	host = "Άγνωστη Προέλευση"

In the above code no matter which variable fails to grab a value(gi 
excluded in check) we assign city and host 2 differnt values, while we 
want to assign a value only to the varibale that failed in the try block.

Is there a way to write the except block in 1-liner?
That woudl require that we actually identify which variable failed in try:

This could work:

ipval = ( os.environ.get('HTTP_CF_CONNECTING_IP') or 
os.environ.get('REMOTE_ADDR', "Cannot Resolve") )
city = "Άγνωστη Πόλη"
host = "Άγνωστη Προέλευση"
try:
	gi = pygeoip.GeoIP('/usr/local/share/GeoIPCity.dat')
	city = gi.time_zone_by_addr( ipval )
	host = socket.gethostbyaddr( ipval ) [0]
except:
	pass

but in this case we assign values to the variables BEFORE the try:

It woould be nice if we could write it as:

ipval = ( os.environ.get('HTTP_CF_CONNECTING_IP') or 
os.environ.get('REMOTE_ADDR', "Cannot Resolve") )
try:
	gi = pygeoip.GeoIP('/usr/local/share/GeoIPCity.dat')
	city = gi.time_zone_by_addr( ipval )
	host = socket.gethostbyaddr( ipval ) [0]
except socket.gaierror as e:
	if city failed assign to it "Άγνωστη Πόλη" while if host failed assign 
it "Άγνωστη Προέλευση"

but without an if statement and in 1 single line.







More information about the Python-list mailing list