python 中的错误NameError: name 'sklearn' is not defined

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 中的错误NameError: name 'sklearn' is not defined相关的知识,希望对你有一定的参考价值。

Traceback (most recent call last):
File "H:\Program Files\workspace\crossValidation\src\simpleExample\test.py", line 10, in <module>
sklearn.cross_validation.KFold(n=4, n_folds=2)
sklearn.cross_validation.KFold(n=4, n_folds=2)
NameError: name 'sklearn' is not defined
请安装过sklearn成功的人给个建议,出现这种问题是怎么了?

用PYDEV开发的? 检查下sklearn 在不在pydev-interpreter里的library目录里,重启下eclipse.
声明下没用过sklearn,以上只是根据错误提示做的判断。
参考技术A 安装完成后需要重新导入python的库文件 参考技术B 需要贴出完整代码

如何使用 Boost 获取 SyntaxError、NameError 等的 Python 错误信息

【中文标题】如何使用 Boost 获取 SyntaxError、NameError 等的 Python 错误信息【英文标题】:How to get Python error information for SyntaxError, NameError, etc. with Boost 【发布时间】:2016-01-08 08:34:41 【问题描述】:

我正在使用 Boost::Python 来执行一些脚本,当出现一些错误时,我会在日志窗口中显示错误消息,其中包含错误发生的行。 不幸的是,我无法获得 SyntaxError 的行号(以及此异常的子类,例如 IndentationError)。

使用此答案中的代码:

https://***.com/a/1418703/5421357

PyObject *ptype, *pvalue, *ptraceback;
PyErr_Fetch(&ptype, &pvalue, &ptraceback);
//pvalue contains error message
//ptraceback contains stack snapshot and many other information
//(see python traceback structure)

//Get error message
char *pStrErrorMessage = PyString_AsString(pvalue);

我设法从 pvalue 和 ptraceback 获取非 SyntaxError 异常的所有错误信息。

但是,在出现 SyntaxError 的情况下,没有可以从中获取信息的回溯(ptraceback 为 NULL)。

我需要知道行号,但我不确定是否可以通过 Boost 获得它。

有什么方法可以获取出错的行号吗?

我有行号就足够了。其他信息不是必需的(例如文件),因为我已经有了我需要的信息(错误类型和描述)。

【问题讨论】:

【参考方案1】:

我在这里找到了一种可行的方法:

https://***.com/a/16806477/5421357

简单来说就是获取语法错误发生的行号:

// Init code here ...

PyObject *res = PyRun_String(script_source,Py_file_input,main_dict,main_dict);      
if(res == NULL)

    PyObject *ptype = NULL, *pvalue = NULL, *ptraceback = NULL;
    PyErr_Fetch(&ptype,&pvalue,&ptraceback);
    PyErr_NormalizeException(&ptype,&pvalue,&ptraceback);

    char *msg, *file, *text;  
    int line, offset;  

    int res = PyArg_ParseTuple(pvalue,"s(siis)",&msg,&file,&line,&offset,&text);

    PyObject* line_no = PyObject_GetAttrString(pvalue,"lineno");
    PyObject* line_no_str = PyObject_Str(line_no);
    PyObject* line_no_unicode = PyUnicode_AsEncodedString(line_no_str,"utf-8", "Error");
    char *actual_line_no = PyBytes_AsString(line_no_unicode);  // Line number        

【讨论】:

以上是关于python 中的错误NameError: name 'sklearn' is not defined的主要内容,如果未能解决你的问题,请参考以下文章

python 中的错误NameError: name 'sklearn' is not defined

如何使用 Boost 获取 SyntaxError、NameError 等的 Python 错误信息

Python UnboundLocalError和NameError错误根源解析

NameError:名称'python'未定义[关闭]

python 中flask框架的入门实例程序 NameError: __name__is not defined!

python 使用eval报错NameError: name ‘null’ is not defined