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 5254289..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)
