<br><br><div class="gmail_quote">On Fri, Jul 8, 2011 at 1:18 PM, Andrew Berg <span dir="ltr"><<a href="mailto:bahamutzero8825@gmail.com">bahamutzero8825@gmail.com</a>></span> wrote:<br><blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;" class="gmail_quote">
<p>Is it bad practice to use this<br>
> logger.error(self.preset_file + ' could not be stored - ' +<br>
> sys.exc_info()[1])<br>
Instead of this?<br>
> logger.error('{file} could not be stored -<br>
> {error}'.format(file=self.preset_file, error=sys.exc_info()[1]))<br>
<br>
<br>
Other than the case where a variable isn't a string (format() converts<br>
variables to strings, automatically, right?) and when a variable is used<br>
a bunch of times, concatenation is fine, but somehow, it seems wrong.<br>
Sorry if this seems a bit silly, but I'm a novice when it comes to<br>
design. Plus, there's not really supposed to be "more than one way to do<br>
it" in Python.<br></p></blockquote><div> </div><div>String formatting is the One Right Way here. It's fine to use string concatenation for a few things, but the operation is O(n^2) because each concat occurs one at a time: Python allocates space for a string the size of the first 2 things, copies the contents over. Then allocate a string the size of that string plus the third string and copy the contents over. It can get pretty slow if you're building a really big string With string formatting, Python creates a single string large enough to copy all the formatting arguements in and then copies the contents over once. </div>
<div> </div><div>Also, string formatting (especially using the new syntax like you are) is much clearer because there's less noise (the quotes all over the place and the plusses) and it's better for dealing with internationalization if you need to do that.</div>
<div> </div><div> </div></div>