documentation: what is "::="?

Terry Reedy tjreedy at
Tue Oct 14 01:59:41 CEST 2008

Anita Kean wrote:
> 1) Everywhere in the old and new documentation, the 
> string of characters "::=" is used in "explaining" things - but
> I can nowhere find any stated meaning of this string.

Read Reference manual introductin notation:
The descriptions of lexical analysis and syntax use a modified BNF 
grammar notation. This uses the following style of definition:

name      ::=  lc_letter (lc_letter | "_")*
lc_letter ::=  "a"..."z"

The first line says that a name is an lc_letter followed by a sequence 
of zero or more lc_letters and underscores. An lc_letter in turn is any 
of the single characters 'a' through 'z'. (This rule is actually adhered 
to for the names defined in lexical and grammar rules in this document.)


> I'm guessing something like "if and only if" is implicated here?


> But for example, if I import the sys module and perform the following three 
> commands,
>         print sys.path
>         sys.path.__str__()
>         str(sys.path)
> the first two give me the python path, and the last reports an error:
>>>>> str(sys.path)
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>>   File "/usr/lib/python2.5/", line 244, in str
>>     return format("%.12g", val)
>>   File "/usr/lib/python2.5/", line 147, in format
>>     formatted = percent % value
>> TypeError: float argument required
> What is it I'm not understanding here?

You should include the data that gives you such puzzling output ;-).
What did print sys.path produce?
Just typing sys.path at >>> should have the same effect as str(sys.path).

More information about the Python-list mailing list