Archive
for / else and try / except / else
Problem
What is that “else” in a for loop? And that “else” in an exception handler?
Solution
They can be confusing but in this thread I found a perfect way to remember what they mean. Asdayasman suggests that we should always annotate these “else” branches:
for _ in []:
...
else: # nobreak
...
try:
...
except:
...
else: # noexcept
...
To be honest, IMO it is best to avoid for / else completely.
endswith also accepts a tuple
Have you ever written something like this?
fname = 'movie.avi'
if fname.endswith('avi') or fname.endswith('mp4'):
print("It's a movie.")
The function endswith also accepts a tuple. Just saying.
fname = 'movie.avi'
if fname.endswith(('avi', 'mp4')):
print("It's a movie.")
Meaning: if it ends as ‘avi‘ or ‘mp4‘, then…
This also works with startswith, of course.
Thanks to one of my students, Marton Sz. who solved one of his exercises using this trick.
Python PIL : IOError: decoder jpeg not available
Problem
Working with JPG files, PIL drops the following error:
Python PIL : IOError: decoder jpeg not available
Solution
sudo pip uninstall PIL sudo apt-get install libjpeg8-dev sudo pip install PIL
Found here.
Print unicode text to the terminal
Problem
I wrote a script in Eclipse-PyDev that prints some text with accented characters to the standard output. It runs fine in the IDE but it breaks in the console:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 11: ordinal not in range(128)
This thing bugged me for a long time but now I found a working solution.
Solution
Insert the following in your source code:
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
I found this trick here. “This allows you to switch from the default ASCII to other encodings such as UTF-8, which the Python runtime will use whenever it has to decode a string buffer to unicode.”
Related
Template
Here is the classical “Hello, World!” script in Python. It can be used as a template for writing a new script:
#!/usr/bin/env python # DESCRIPTION: hello world # DATE: 2010.09.21. (yyyy.mm.dd.) print "Hello, World!"
Tip: If you want to insert source code in your blog at WordPress.com, check out this post: Code » Posting Source Code.
Update (20110503): For a more professional template, see this post, where Guido tells us how he writes his main() functions.
