New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IDLE: warn if save-as name matches stdlib name #69708
Comments
When users 'saveas', warn if name matches that of a stdlib modules. Note that shadowing is opposite for lib and binary (builtin) modules, so message needs to be different. I am not worrying about 3rd party modules on the search path (ie, site-packages), which would be shadowed like lib modules. Rough outline of code to add to IOBinding. from os,path import dirname # this part on initiallzation or first saveas call
def libmodules():
with open(dirname(dirname(__file__))) as lib:
for f in lib:
if <directory containing __init__.py#> or f.endswith(.py):
yield f
# test.test__all__ has this code
islibmodule = frozenset(libmodules()).__contains__
isbinmodule = frozenset(sys.builtin_module_names).__contains__
# this part after saveas dialog returns
if islibmodule(name):
go = warn("This name matches a stdlib name in /Lib. If you run python in this directory, you will not be able to import the stdlib module. Continue?".)
elif isbinmodule(name):
go = warn("This name matches a builtin stdlib name. You will not be able to import this file. Continue?".)
else:
go = True
if go:
<save as requested>
else:
(get name again> # or put in while not go loop |
The lib messages should say "Neither you nor python will be able to import the stdlib module". Example of python-imported lib names that a beginner might write are abc, io, os, nt, and stat. |
I'm not sure about "Neither you nor Python will be able to import "If you run Python in this directory, your version of <stdlibname> |
Do we need a full path name here as well? Probably not. |
Also check if the name is not an identifier and therefore could not be imported. Example: >>> exec('import abc--bb')
import abc--bb
^
SyntaxError: invalid syntax |
Many beginners don't write files in order to import them. For them, these name-checking is simply adding noise. If you want to do something in this area, I think a much more useful (and difficult) course of action would be to check on the opposite end. If an AttributeError "module blah has no attribute foo" is raised, then check whether a file in the current directory (or simply the current file) is named blah, and there is also a stdlib blah that has fool. |
Beginners import stdlib files such as random. And they save scripts with such name, and accidentally import the script when not desired. Beginners should learn how to test a script by running a test file provided by an instructor or written themselves. In either case, they *will* have to import the script. |
I have created a pull request for this issue. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: