>> You're right. I was being sloppy. > > ['ArithmeticError', 'AssertionError', 'AttributeError', > 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', > 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', > 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', > 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', > 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', > 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', > 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', > 'InterruptedError', 'IsADirectoryError', 'KeyError', > 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', > 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', > 'OSError', 'OverflowError', 'PendingDeprecationWarning', > 'PermissionError', 'ProcessLookupError', 'ReferenceError', > 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopIteration', > 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', > 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', > 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', > 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', > 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', > '__build_class__', '__debug__', '__doc__', '__import__', '__name__', > '__package__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', > 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', > 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', > 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', > 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', > 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', > 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', > 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', > 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', > 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', > 'type', 'vars', 'zip'] > > I think I can safely say that all the names beginning with an > uppercase letter (exceptions, True/False/None/Ellipsis), and the ones > beginning with underscores, should not be overridden. Well and good. > Still leaves 72 builtins. Obviously overriding len, print, range, etc > would be risky (unless, as mentioned above, you're making a drop-in > replacement), but there are plenty that you'd never notice (eg if you > use "hash" for an encoded password, or "input" for the string the user > typed into an HTML form). I would hope, for instance, that an editor > would not color-highlight 'credits' differently, as it's designed for > interactive work. There are plenty in the grey area - is it safe to > use "sum" as an accumulator or "min" for a unit of time? What about > using "super" to store the amount of retirement money you've put away? > I'd be inclined to avoid this sort any time I'm aware of them, just > because it'll make debugging easier on the day when something goes > wrong.
Okay, now I'm a bit confused. "print" is both a <keyword> and a member of the builtins. What happens then? And abs(), max(), hex() and such seemed like keywords to my scientific self (due to never having to "include"/import them), but clearly their not. And int, list, tuple, dict and such always seemed like keywords to my CS self because they were included in Python's type system (like "int" would be in C). They are all one-step removed from keywords. And yet, since they are not in a separate namespace, they should not be used as variable names. Perhaps since they are very different from one another, they should be put in separate namespaces off of a global, root namespace... (math, string, etc.) Despite that, seems like PEP8 should suggest this not shadowing these built-ins which are at global scope. MarkJ Tacoma, Washington -- http://mail.python.org/mailman/listinfo/python-list