- 1. IndexError: list index out of range
- 2. " re.error: missing ), unterminated subpattern at position 1 "
- 3. 文件编码格式报错
- 4. Anaconda Prompt中安装包
- 5. No such file or directory
- 6. ValueError: not enough values to unpack (expected 2, got 1)
- 7. xlrd.biffh.XLRDError: Excel xlsx file; not supported
- 8. TypeError: 'list' object is not callable
- 9 空列表遇到for...in...问题
- 10 RuntimeError: view size is not compatible with input tensor‘s size and stride
1. IndexError: list index out of range
debug报错:{TypeError}‘builtin_function_or_method’ object is not subscriptable
报错原因:csv文件中最后一行有空数据,即在列表list中为[],引发报错。
2. " re.error: missing ), unterminated subpattern at position 1 "
原因及解决:通过python的debug模式找到了出问题的文件是NER结果的7.10.2,其中有出现如“ 斜( ”这种词,导致报错,手动删去后问题解决。
3. 文件编码格式报错
对于Unicode字符,python解释器需要先将Unicode字符编码为GBK,然后再写入csv文件。但是由于该Unicode字符串中包含一些GBK中无法显示的字符,导致此时提示“’gbk’ codec can’t encode”的错误。
解决方法:尝试了许多网上的解决方案,最后设置了一下输出结果存放的csv文件的编码格式,解决了问题。
4. Anaconda Prompt中安装包
用conda install安装包时,若出现如下报错,则说明Anaconda相关网站没有这个包,就会报出找不到的错误。
解决办法:改用pip install安装,成功。
5. No such file or directory
原因:cut()函数中的for函数中最后到return就返回了,后续代码不会执行,所以不会生成报错中提示没有的文件。
6. ValueError: not enough values to unpack (expected 2, got 1)
原因:由于自定义的idf语料库的txt文件中,存在空行或换行符\n,以及存在△、$等特殊字符。
解决方法:写了两个函数,用于去除空行、换行符和特殊字符,只保留中文和英文字符。
# 去掉每行头尾空格及空行、换行符\n
def clearBlankLine(lines):
result = []
for line in lines:
line = line.strip() # 去掉每行头尾空格
if not len(line): # 如果是空行
continue
result.append(line)
return result
# 去掉特殊字符,只保留中英文字符
def clearSpecialSymbols(lines):
result = []
for line in lines:
valid1 = re.search('^[a-zA-Z]',line)
valid2 = re.search('^[\u4e00-\u9fa5]',line)
if valid1 or valid2:
result.append(line)
return result
7. xlrd.biffh.XLRDError: Excel xlsx file; not supported
原因:用指令 conda list
查看已安装包版本,xlrd 更新到了2.0.1版本,只支持.xls文件。
解决办法:
- 可以安装旧版xlrd,运行:
conda uninstall xlrd
conda install xlrd==1.2.0
- 也可以用openpyxl代替xlrd打开.xlsx文件:
df=pandas.read_excel(‘data.xlsx’,engine=‘openpyxl’)
8. TypeError: ‘list’ object is not callable
原因:callable()是python的内置函数,用来检查对象是否可被调用,可被调用指的是对象能否使用()括号的方法调用,类似于iterable()。
在代码中,由于变量list和函数list重名了,所以函数在使用list函数时,发现list是一个定义好的列表,而列表是不能被调用的,因此抛出一个类型错误。
解决办法:只需修改变量名list为其他就可以了。
注意:在命名变量时要注意,应避免和python的函数名、关键字冲突。
9 空列表遇到for…in…问题
test = []
a = 0
for i in test: # 由于test是空列表,这一行不成立,所以后边不会执行
a+=1
10 RuntimeError: view size is not compatible with input tensor‘s size and stride
原因:view()需要Tensor中的元素地址是连续的,但可能出现Tensor不连续的情况,所以先用 .contiguous() 将其在内存中变成连续分布:
out = out.contiguous().view(out.size()[0], -1)