1.打开文件时,总是出现IOError:[Error:22]......(省略号一般写的是文件名不存在之类的英文)。但是路径与文件名完全正确。
解决方法:在路径前加r或者R,例如:
f=open(r"D:\pythontest\test.txt","w")
这是因为原始字符串的一些特性。原始字符串是指没有进行转义的字符。
打开文件时出现异常是因为“\t”被当成了特殊字符进行处理,在前面加上“r/R”,便不会进行转义,才能正确打开文件。
2.打开文件后,文件无法正常读取。错误为:
<span style="font-size:18px;">ValueError: I/O operation on closed file</span>
解决方法:修改f.close()的位置,缩进或者前进
这个错误一般会出现在for循环中,f.close()一般与前面代码中f=open()的缩进量相同
3.对于超出索引值得理解。
例如爬取的内容索引到11就结束了,而此时定义的range为(0,16),此时就会报错:
<span style="font-size:18px;">IndexError: list index out of range</span>
原来的理解就是只要范围比要获取的内容大,肯定不会出错。然而恰恰相反,只有定义的索引值小于其索引范围才能正常运行。比如索引范围为(1,6),定义时只要小于6才不会报错,超出6以外没有内容,索引找不到,就会出错了。
建议在使用索引前,都要用len()判断一下长度。
4.正则表达式里的“\”
在正则表达式中,匹配换行,则要写入“\n”;可是要单纯的匹配“\n”,则需要用反斜杠来进行转义,写为“\\n”。
而单独的匹配一个“\”,则需要用“\\”来进行匹配。
5.字典,序列和元组之间的转换
在某次写代码时,突然报了一个错误:
<span style="font-size:18px;">ValueError: dictionary update sequence element #0 has length 1; 2 is required</span>
然后查找原因有以下发现:
<span style="font-size:18px;">>>> d={1:'a',2:'b',3:'c'}
>>> d
{1: 'a', 2: 'b', 3: 'c'}
>>> list(d)
[1, 2, 3]
>>> d
{1: 'a', 2: 'b', 3: 'c'}
>>> tuple(d)
(1, 2, 3)
>>> d
{1: 'a', 2: 'b', 3: 'c'}
>>> a=list(d)
>>> a
[1, 2, 3]
>>> dict(a)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
dict(a)
TypeError: cannot convert dictionary update sequence element #0 to a sequence
>>> </span>
可以看出:
直接声明的字典可以通过list()和tuple()分别转换成列表和元组,而列表和元组无法通过dict()转换成字典类型。
关于列表和元组转换成字典可以这样解决:
<span style="font-size:18px;">>>> L1=[1,2,3]
>>> L2=['a','b','c']
>>> dict(zip(L1,L2))
{1: 'a', 2: 'b', 3: 'c'}
>>> t1=(1,2,3)
>>> t2=('a','b','c')
>>> dict(zip(t1,t2))
{1: 'a', 2: 'b', 3: 'c'}</span>
6.输出中文时的小错误
在pycharm中写入中文的时候,有时候是会报错的,这时候再前面加一个"u",就可以了。
在Python2.7中,两种写法都可以: