"Assertion '__builtin_expect(__n < this->size(), true)' failed" Visual Studio 代码 Python 中的错误
"Assertion '__builtin_expect(__n < this->size(), true)' failed" error in Visual Studio Code Python
我知道关于断言失败的内容已经很多了。但是 none 对我很有用。听我说完。
这是代码:
import numpy as np, pandas as pd
from outliertree import OutlierTree
### random data frame with an obvious outlier
nrows = 100
np.random.seed(1)
df = pd.DataFrame({
"numeric_col1" : np.r_[np.random.normal(size = nrows - 1), np.array([float(1e6)])],
"numeric_col2" : np.random.gamma(1, 1, size = nrows),
"categ_col" : np.random.choice(['categA', 'categB', 'categC'], size = nrows)
})
### test data frame with another obvious outlier
df_test = pd.DataFrame({
"numeric_col1" : np.random.normal(size = nrows),
"numeric_col2" : np.r_[np.array([float(-1e6)]), np.random.gamma(1, 1, size = nrows - 1)],
"categ_col" : np.random.choice(['categA', 'categB', 'categC'], size = nrows)
})
### fit model
outliers_model = OutlierTree()
outliers_df = outliers_model.fit(df, outliers_print = 10, return_outliers = True) # gives error
### find outliers in new data
new_outliers = outliers_model.predict(df_test)
### print outliers in readable format
outliers_model.print_outliers(new_outliers)
这是错误:
/usr/include/c++/10/bits/stl_vector.h:1045: std::vector<_Tp,
_Alloc>::reference std::vector<_Tp, _Alloc>::operator[](std::vector<_Tp, _Alloc>::size_type) [with _Tp = char; _Alloc = std::allocator; std::vector<_Tp,
_Alloc>::reference = char&; std::vector<_Tp, _Alloc>::size_type = long unsigned int]: Assertion '__builtin_expect(__n < this->size(), true)'
failed. Aborted (core dumped)
错误发生在行:
outliers_df = outliers_model.fit(df, outliers_print = 10, return_outliers = True)
Python版本:
Python 3.9.2 (default, Feb 20 2021, 00:00:00) [GCC 10.2.1 20201125
(Red Hat 10.2.1-9)] on linux
OS:
Fedora 5.10.12-200.fc33.x86_64
IDE:
Visual Studio Code
代码在 Google Colab 中运行良好。那么为什么它只发生在 IDE 中呢?如果是设置或环境问题,那我该怎么办?这是我第一次使用 Visual Studio 代码。
谢谢
我对 OutlierTree 的了解还不够,不知道如何修复错误。但是,您看到的错误是在函数 std::vector::operator[]
中,它是 std::vector
的 access by index 函数。断言错误仅表示您试图访问索引大于向量长度的项目。
至于为什么你只在 VS Code 中看到这个错误,我认为这是因为通常只在调试模式下检查断言。 Google Collab 可能在没有断言的情况下在发布模式下编译 - 这并不意味着您不访问越界项目,它只是没有捕获到错误。
我建议您使用 gdb 或其他调试器来了解您尝试越界访问哪个向量,然后将堆栈跟踪附加到您的问题。也许用 OutlierTree 提交错误报告 - 这似乎是他们可以处理得更好的事情。
这里是图书馆的作者。代码中存在一个错误,该错误仅在安装程序定义了宏 _GLIBCXX_ASSERTIONS
时才会触发,否则不会显示。现在应该已在最新版本 (1.7.0) 中修复 - 请重试 (pip install -U outliertree
),如果问题仍然存在,请在 github 问题跟踪器中发表评论。
我知道关于断言失败的内容已经很多了。但是 none 对我很有用。听我说完。
这是代码:
import numpy as np, pandas as pd
from outliertree import OutlierTree
### random data frame with an obvious outlier
nrows = 100
np.random.seed(1)
df = pd.DataFrame({
"numeric_col1" : np.r_[np.random.normal(size = nrows - 1), np.array([float(1e6)])],
"numeric_col2" : np.random.gamma(1, 1, size = nrows),
"categ_col" : np.random.choice(['categA', 'categB', 'categC'], size = nrows)
})
### test data frame with another obvious outlier
df_test = pd.DataFrame({
"numeric_col1" : np.random.normal(size = nrows),
"numeric_col2" : np.r_[np.array([float(-1e6)]), np.random.gamma(1, 1, size = nrows - 1)],
"categ_col" : np.random.choice(['categA', 'categB', 'categC'], size = nrows)
})
### fit model
outliers_model = OutlierTree()
outliers_df = outliers_model.fit(df, outliers_print = 10, return_outliers = True) # gives error
### find outliers in new data
new_outliers = outliers_model.predict(df_test)
### print outliers in readable format
outliers_model.print_outliers(new_outliers)
这是错误:
/usr/include/c++/10/bits/stl_vector.h:1045: std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](std::vector<_Tp, _Alloc>::size_type) [with _Tp = char; _Alloc = std::allocator; std::vector<_Tp, _Alloc>::reference = char&; std::vector<_Tp, _Alloc>::size_type = long unsigned int]: Assertion '__builtin_expect(__n < this->size(), true)' failed. Aborted (core dumped)
错误发生在行:
outliers_df = outliers_model.fit(df, outliers_print = 10, return_outliers = True)
Python版本:
Python 3.9.2 (default, Feb 20 2021, 00:00:00) [GCC 10.2.1 20201125 (Red Hat 10.2.1-9)] on linux
OS:
Fedora 5.10.12-200.fc33.x86_64
IDE:
Visual Studio Code
代码在 Google Colab 中运行良好。那么为什么它只发生在 IDE 中呢?如果是设置或环境问题,那我该怎么办?这是我第一次使用 Visual Studio 代码。
谢谢
我对 OutlierTree 的了解还不够,不知道如何修复错误。但是,您看到的错误是在函数 std::vector::operator[]
中,它是 std::vector
的 access by index 函数。断言错误仅表示您试图访问索引大于向量长度的项目。
至于为什么你只在 VS Code 中看到这个错误,我认为这是因为通常只在调试模式下检查断言。 Google Collab 可能在没有断言的情况下在发布模式下编译 - 这并不意味着您不访问越界项目,它只是没有捕获到错误。
我建议您使用 gdb 或其他调试器来了解您尝试越界访问哪个向量,然后将堆栈跟踪附加到您的问题。也许用 OutlierTree 提交错误报告 - 这似乎是他们可以处理得更好的事情。
这里是图书馆的作者。代码中存在一个错误,该错误仅在安装程序定义了宏 _GLIBCXX_ASSERTIONS
时才会触发,否则不会显示。现在应该已在最新版本 (1.7.0) 中修复 - 请重试 (pip install -U outliertree
),如果问题仍然存在,请在 github 问题跟踪器中发表评论。