我想限制在Python 3中导入一些模块(但是对于这个问题的范围,我们要说我想限制任何导入)。这是我尝试这样做的方式:
query = @"select * from archive_master where docgroupID=@docgroupID and (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), @qry1) OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), @qry2) OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), @qry3) OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), @qry4))";
SqlParameter pdocgroupID = emp_Cmd.Parameters.Add("@docgroupID",SqlDbType.BigInt);
SqlParameter pqry1= emp_Cmd.Parameters.Add("@qry1", SqlDbType.NVarChar);
SqlParameter pqry2 = emp_Cmd.Parameters.Add("@qry2", SqlDbType.NVarChar);
SqlParameter pqry3 = emp_Cmd.Parameters.Add("@qry3", SqlDbType.NVarChar);
SqlParameter pqry4 = emp_Cmd.Parameters.Add("@qry4", SqlDbType.NVarChar);
pdocgroupID.Value = Request.QueryString["docgroupID"];
pqry1.Value =txtsearch.Text.Trim();
pqry2.Value = '"'+ txtsearch.Text.Trim()+"*"+'"';
pqry3.Value = '"'+"*" + txtsearch.Text.Trim() + "*"+'"';
pqry4.Value = '"'+"*" + txtsearch.Text.Trim()+'"';
我的理解是,这应该引发异常,并且它基于该文档 - https://docs.python.org/3/reference/import.html#importsystem表示
import语句的搜索操作定义为使用适当的参数调用__import __()函数。
然而,它没有。我非常感谢为什么和建议如何实现我的目标的解释
答案 0 :(得分:2)
您有一个误解:文档并不建议在模块中定义您自己的__import__
函数。他们想说的是当你有一个像
import mymodule
然后在这里解析名称mymodule
的方式是以这种方式调用the built-in function __import__
:
__import__('mymodule')
如果要阻止成功导入模块,可以在其中放置任何语法错误或运行时错误代码,例如:把它作为文件中的第一行:
# my_unimportable_file.py
errorerrorerror
答案 1 :(得分:2)
语句import module_name
使用参数__import__
调用内置函数'module_name'
。它没有,实际上不能按照您的预期调用module_name.__import__()
,因为模块本身尚未加载。
实现所需目标的一种好方法是检查不可导入模块中的__name__
全局变量。当它运行时,它应该等于'__main__'
,但是当它被导入时,它将是从其名称构造的一些其他字符串。因此,您可以尝试:
if __name__ != '__main__':
raise ImportError("Imports are not allowed")