diff --git a/Lib/telnetlib.py b/Lib/telnetlib.py
index 656e97b..4c806db 100644
--- a/Lib/telnetlib.py
+++ b/Lib/telnetlib.py
@@ -186,7 +186,7 @@
         self.cookedq = ''
         self.eof = 0
         self.option_callback = None
-        if host:
+        if host is not None:
             self.open(host, port)
 
     def open(self, host, port=0):
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 70b1606..c22f576 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -16,7 +16,7 @@
 def print_list(extracted_list, file=None):
     """Print the list of tuples as returned by extract_tb() or
     extract_stack() as a formatted stack trace to the given file."""
-    if not file:
+    if file is None:
         file = sys.stderr
     for filename, lineno, name, line in extracted_list:
         _print(file,
@@ -51,7 +51,7 @@
     'file' should be an open file or file-like object with a write()
     method.
     """
-    if not file:
+    if file is None:
         file = sys.stderr
     if limit is None:
         if hasattr(sys, 'tracebacklimit'):
@@ -116,7 +116,7 @@
     occurred with a caret on the next line indicating the approximate
     position of the error.
     """
-    if not file:
+    if file is None:
         file = sys.stderr
     if tb:
         _print(file, 'Traceback (most recent call last):')
@@ -203,7 +203,7 @@
     """Shorthand for 'print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file)'.
     (In fact, it uses sys.exc_info() to retrieve the same information
     in a thread-safe way.)"""
-    if not file:
+    if file is None:
         file = sys.stderr
     try:
         etype, value, tb = sys.exc_info()
@@ -214,7 +214,7 @@
 def print_last(limit=None, file=None):
     """This is a shorthand for 'print_exception(sys.last_type,
     sys.last_value, sys.last_traceback, limit, file)'."""
-    if not file:
+    if file is None:
         file = sys.stderr
     print_exception(sys.last_type, sys.last_value, sys.last_traceback,
                     limit, file)
diff --git a/Lib/urllib.py b/Lib/urllib.py
index b248b8a..0720125 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -203,7 +203,7 @@
         if self.tempcache and url in self.tempcache:
             return self.tempcache[url]
         type, url1 = splittype(url)
-        if not filename and (not type or type == 'file'):
+        if filename is None and (not type or type == 'file'):
             try:
                 fp = self.open_local_file(url1)
                 hdrs = fp.info()
@@ -662,7 +662,7 @@
 def localhost():
     """Return the IP address of the magic hostname 'localhost'."""
     global _localhost
-    if not _localhost:
+    if _localhost is None:
         _localhost = socket.gethostbyname('localhost')
     return _localhost
 
@@ -670,7 +670,7 @@
 def thishost():
     """Return the IP address of the current host."""
     global _thishost
-    if not _thishost:
+    if _thishost is None:
         _thishost = socket.gethostbyname(socket.gethostname())
     return _thishost
 
@@ -678,7 +678,7 @@
 def ftperrors():
     """Return the set of errors raised by the FTP class."""
     global _ftperrors
-    if not _ftperrors:
+    if _ftperrors is None:
         import ftplib
         _ftperrors = ftplib.all_errors
     return _ftperrors
@@ -687,7 +687,7 @@
 def noheaders():
     """Return an empty mimetools.Message object."""
     global _noheaders
-    if not _noheaders:
+    if _noheaders is None:
         import mimetools
         import StringIO
         _noheaders = mimetools.Message(StringIO.StringIO(), 0)
diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py
index 52542893..b562ab3 100644
--- a/Lib/webbrowser.py
+++ b/Lib/webbrowser.py
@@ -17,7 +17,7 @@
 
 def get(using=None):
     """Return a browser launcher instance appropriate for the environment."""
-    if using:
+    if using is not None:
         alternatives = [using]
     else:
         alternatives = _tryorder
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py
index d1edf20..6460aa2 100644
--- a/Lib/xmlrpclib.py
+++ b/Lib/xmlrpclib.py
@@ -755,7 +755,7 @@
     elif methodresponse and isinstance(params, TupleType):
         assert len(params) == 1, "response tuple must be a singleton"
 
-    if not encoding:
+    if encoding is None:
         encoding = "utf-8"
 
     m = Marshaller(encoding)
@@ -767,7 +767,7 @@
         xmlheader = "<?xml version='1.0'?>\n" # utf-8 is default
 
     # standard XML-RPC wrappings
-    if methodname:
+    if methodname is not None:
         # a method call
         if not isinstance(methodname, StringType):
             methodname = methodname.encode(encoding)
