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