Why type('string') seems to return null string in python cgi
Question: I'm reading Mark Lutz's _Programming Python 3rd editon_ , and I'm puzzled with
a question: `type('something')` always result in an empty string.

Could someone kindly explain this?

Context info:

I add one line to the script `$CODEROOT\pp3e\Internet\Web\cgi-bin\tutor0.py`

    
    
    #!/usr/bin/python
    #######################################################
    # runs on the server, prints html to create a new page;
    # url=http://localhost/cgi-bin/tutor0.py
    #######################################################
    
    print "Content-type: text/html\n"
    print "<TITLE>CGI 101</TITLE>"
    print "<H1>A First CGI script</H1>"
    print '<p>[%s]'%type('apple') # ★ I add this line
    print "<P>Hello, CGI World!</P>"
    

**For the added line, I hope to see in browser`[<type 'str'>]` , but I
actually see `[]` .**

![enter image description here](http://i.stack.imgur.com/GfKzy.png)

The python to start a HTTP server is at
`$CODEROOT\pp3e\Internet\Web\webserver.py`

    
    
    #########################################################################
    # implement HTTP web server in Python which knows how to serve HTML
    # pages and run server side CGI scripts;  serves files/scripts from
    # the current working dir and port 80, unless command-line args;
    # python scripts must be stored in webdir\cgi-bin or webdir\htbin;
    # more than one of these may be running on the same machine to serve
    # from different directories, as long as they listen on different ports;
    #########################################################################
    
    webdir = '.'   # where your html files and cgi-bin script directory live
    port   = 80    # http://servername/ if 80, else use http://servername:xxxx/
    
    import os, sys
    from BaseHTTPServer import HTTPServer
    from CGIHTTPServer  import CGIHTTPRequestHandler
    
    if len(sys.argv) > 1: webdir = sys.argv[1]             # command-line args
    if len(sys.argv) > 2: port   = int(sys.argv[2])        # else dafault ., 80
    print 'webdir "%s", port %s' % (webdir, port)
    
    # hack for Windows: os.environ not propogated
    # to subprocess by os.popen2, force in-process
    if sys.platform[:3] == 'win':
        CGIHTTPRequestHandler.have_popen2 = False
        CGIHTTPRequestHandler.have_popen3 = False          # emulate path after fork
        sys.path.append('cgi-bin')                         # else only adds my dir
    
    os.chdir(webdir)                                       # run in html root dir
    srvraddr = ("", port)                                  # my hostname, portnumber
    srvrobj  = HTTPServer(srvraddr, CGIHTTPRequestHandler)
    srvrobj.serve_forever()                                # serve clients till exit
    

My environment:

  * Python 2.7
  * Windows 7 x64


Answer: Probably because the angle brackets in `<type 'str'>` are causing the output
to be treated as HTML.

Try changing:

    
    
    print '<p>[%s]'%type('apple') # ★ I add this line
    

into:

    
    
    hstr = "%s"%type('apple')
    hstr = hstr.replace('<','&lt;').replace('>','&gt;')
    print '<p>[%s]'%hstr
    

