<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">On Wed, Jul 10, 2013 at 3:30 PM, Doug Hellmann <span dir="ltr"><<a href="mailto:doug.hellmann@dreamhost.com" target="_blank">doug.hellmann@dreamhost.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote"><div class="im">On Wed, Jul 10, 2013 at 3:57 PM, David Ripton <span dir="ltr"><<a href="mailto:dripton@redhat.com" target="_blank">dripton@redhat.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>On 07/10/2013 02:01 PM, Nachi Ueno wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
HI folks<br>
<br>
I would like to ask the review criteria in the community.<br>
<br>
Should we use exception for non-exceptional cases when we can use<br>
  parameter checking?<br>
<br>
Example1:  Default value for array index<br>
<br>
try:<br>
    value = list[5]<br>
except IndexError:<br>
     value = 'default_value'<br>
<br>
This can be also written as,<br>
<br>
      list_a[3] if len(list_a) > 3 else 'default_value'<br>
</blockquote>
<br></div>
Both of these are fine.  Neither deserves to be banned.<br>
<br>
But LBYL is often naive in the face of concurrency.  Just because something was true a microsecond ago doesn't mean it's still true. Exceptions are often more robust.</blockquote><div><br></div></div><div>getattr() takes a default and, as it is implemented in C, is thread-safe. So: <br>

</div><div><br></div><div>  value = getattr(my_obj, 'might_not_be_there', 'default')</div><div><br></div><div>Of course, it's probably better to make sure you've always got the same type of object in the first place but sometimes the attributes change across versions of libraries.</div>

<div><br></div><div>For accessing elements of a sequence that may be too short, itertools.chain() and itertools.islice() are useful.</div><div><br></div><div><div><div>>>> import itertools</div>
<div>>>> vals1 = ['a', 'b']</div><div>>>> a, b, c = itertools.islice(itertools.chain(vals1, ['c']), 3)<br></div><div>>>> a, b, c</div><div>('a', 'b', 'c')</div>

<div>>>> vals2 = ['a', 'b', 'd']</div><div>>>> a, b, c = itertools.islice(itertools.chain(vals2, ['c']), 3)</div><div>>>> a, b, c</div><div>('a', 'b', 'd')</div>
</div></div></div></div></div></blockquote><div><br></div><div style>++ every time I look at itertools it's doing something clever</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div><span class="HOEnZb"><font color="#888888">
</font></span></div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Doug</div><div><br></div></font></span></div></div></div></div>
<br>_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><br></div>-Dolph
</div></div>