style query: function attributes for return codes?
Steven Bethard
steven.bethard at gmail.com
Fri Dec 10 11:43:17 EST 2004
george young wrote:
> [python 2.3.3, x86 linux]
> I recently found myself writing something like:
>
> def get_connection():
> if tcp_conn():
> if server_allows_conn():
> return 'good_conn'
> else:
> return 'bad_auth'
> else:
> return 'no_server'
>
>
> cn = get_connection()
> if cn == 'good_con': ...
>
>
> This is obviously just evil, since a misspelling in the string
> return is treacherous. I'm considering function attributes:
>
> def get_connection():
> if tcp_conn():
> if server_allows_conn():
> return get_connection.GOOD
> else:
> return get_connection.BAD_AUTH
> else:
> return get_connection.NO_SERVER
> get_connection.GOOD = 1
> get_connection.BAD_AUTH = 2
> get_connection.NO_SERVER = 3
>
>
> If I put this function in it's own module, the solution is obvious:
>
> GOOD_CONN = 1
> def get_connection():
> ...
> return GOOD_CONN
>
>
> But if this is a small utility function that belongs inside a
> larger module/class, I would like to have it's return values
> closely associated with the function, not just another value in
> the parent class.
Sorry, I also meant to add that the other obvious way of dealing with
this kind of thing is to make the results keyword parameters:
def get_connection(GOOD=1, BAD_AUTH=2, NO_SERVER=3):
if tcp_conn():
if server_allows_conn():
return GOOD
else:
return BAD_AUTH
else:
return NO_SERVER
This has the benefit that if your user wants different return values
they can specify them, but the disadvantage that someone improperly
calling the function with more than 0 parameters will get, instead of an
error message, a strange return value.
Steve
More information about the Python-list
mailing list