使用import语句禁止在Python中导入

时间:2018-02-09 23:29:37

标签: python python-3.x python-import

我想限制在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 __()函数。

然而,它没有。我非常感谢为什么和建议如何实现我的目标的解释

2 个答案:

答案 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")