python error 记录

用于记录error

IndentationError: expected an indented block
问题1:缩进错误,需要一个缩进
解决:确认缩进

TypeError: unhashable type: ‘list’
问题2:list不能hash,set和dict里面不能用list。
解决:删了list

IndexError: string index out of range
问题3:索引越界超出。
解决:len(变量)-1 确定边界。

AttributeError: ‘list’ object has no attribute ‘join’
问题4:list 没有属性 join
解决:list 是append() 或pop(),字符串才能用join()

print的bug
问题5:print里面对list进行操作,同时用变量输出的话结果不对。这一问题对取值也有影响,切片的取值带[],正常取值则不会。(该问题似乎已修复)

b=['a','b','c']
print('remove 无返回值',b.remove('a'),' b 为',b)
#输出remove 无返回值 None  b 为 ['b']

解决:输出时用切片

b=['a','b','c']
print('remove 无返回值',b.remove('a'),' b 为',b[:])

TypeError: exceptions must derive from BaseException
问题6:异常必须派生自基本异常类
解决:自定义异常用exception或者继承异常类class xx(异常类型)

RuntimeError: No active exception to reraise
问题7:没有活动的异常可以抛出
解决:raise后接的异常类型要和except后面的类型一致,嫌麻烦的就用exception

TabError: inconsistent use of tabs and spaces in indentation
问题8:缩进不对
解决:全部用空格代替tab

ImportError: cannot import name ‘ft2font’ from ‘matplotlib’
问题9:千万不要用pip直接装matplotlib和numpy。
由此可能还会有:ModuleNotFoundError: No module named ‘kiwisolver’
原因不明。
解决:部分重装或升级重装
pip uninstall matplotlib
pip install --upgrade matplotlib

pip uninstall kiwisolver
pip install kiwisolver

ValueError: x and y must have same first dimension, but have shapes (10408944,) and (20817888,)
问题10:在plt绘图时x和y的第一维度不一致。
解决:在用plt绘图时,x和y的值的数量(或是长度)要一样,上面的这个value是波形图参数time和wavedata的长度不一致,time(x坐标)是10408944,wavedata(y坐标)是20817888,改成一致就行了。

SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape
问题11:简单说就是编码错误。变量是个路径的话要2个’'。
解决:a = ‘c:\123\test.py’ 或者 a = r‘c:\123\test.py’

PermissionError: [Errno 13] Permission denied: ‘C:\Users\dsSHI\Downloads\识别PDF数据并导出为Excel文档\pdf2xlsx’
问题12:访问路径的权限不够
解决:加权限。

UnboundLocalError: local variable ‘list’ referenced before assignment
问题13:有多个list 变量,不知道绑定哪一个。
解决:换个变量名。

SyntaxError: EOL while scanning string literal
问题14:好像是编译错误。比如:saved_pic = r"E:\WebServer\WordPress\to_wp\hi-baidu-mover_v2\pic" + picName + ‘.jpg’
解决:路径变量后面多了一个反斜杠,去掉即可。如果需要加文件可以用如下形式:
参考https://blog.csdn.net/liangyuannao/article/details/8724686

method 1: compile OK
saved_pic = "E:\\WebServer\\WordPress\\to_wp\\hi-baidu-mover_v2\\pic\\"    
saved_pic += picName + '.jpg'
method 2: compile OK
saved_pic = "E:\WebServer\WordPress\to_wp\hi-baidu-mover_v2\pic"    
 saved_pic += '\\' + picName + '.jpg'

PermissionError: [Errno 13] Permission denied:
问题15:权限错误,权限拒绝。
解决:被误导了,用open的时候不光是文件夹权限问题,如果后面接的路径是文件夹而不是具体的文件或者文件本身不存在或者权限不够也会报错。

UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xca in position 364: illegal multibyte sequence
问题16:编码错误,gbk编码不能编译字节。
解决:
方法一:换个编码方式

FILE_OBJECT= open('order.log','r', encoding='UTF-8')

方法二:二进制读取

FILE_OBJECT= open('order.log','rb')

os.path.isfile() 老是返回false
问题17:如题
解决:里面的参数要绝对路径,比如:

def get_all_pdf(path):
    return [f for f in os.listdir(path) if \
    os.path.isfile(os.path.join(path,f)) and f.endswith('.pdf')]

TypeError: ‘generator’ object is not subscriptable
(TypeError: object of type ‘generator’ has no len())
问题18类型错误,生成器对象没有下标。
解决:生成器对象如果没有初始化是没有长度的,初始化后才会有相应长度。但是一个生成器对象好像不能反复初始化,不太明白原理。
如果要进行print或者使用其中的一些元素,可以用list()进行初始化,list 和生成器的区别是:list=[x for x in range(1,10)] g=(x for x in range(1,10))


c1=(a for a in range(1,10))
#print(len(c1))
print(list(c1))
#for i in list(c1)[0:3]:
#    print(i)
#print(list(c1))

问题19No system module pywintypes ,由于python版本问题,在pycharm里的环境配置会报错,类似的还有 cannot import Mapping from collections,get_theme_default等。
解决:一般要么降python版本,要么升级pycharm。否则就要根据报错自己去百度解决方案了,上面这个可以这么解决:转https://blog.csdn.net/u014663232/article/details/106799735

问题20爬虫爬下来的html是奇怪的编码格式,非UTF-8,如下这种:
title>\n\t\t\t\xe7\xb4\xb3\xe5\xa3\xab
解决:content加个decode就行了,如下:

#这个就是非正常编码
#print(req.content)
#这个就是utf-8
print(req.content.decode('UTF-8'))

问题21即使段落注释掉了,还是报注释掉的内容错误:
SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 20-21: truncated \UXXXXXXXX escape
代码:

"""
pdf_document = r"C:\Users\d\Desktop\pdf改名脚本\33\91320000MA1NJPQ74F_7cea56d764324996800e38b3e8409de2.pdf"
"""

分析:这个问题很奇怪,很可能是pycharm的bug,把注释去掉就是正常的,加了注释反而报错。
解决:哪里画红线改哪里,示例只要改成 C:\\ 就可以了,离谱!!!

问题22定义了test方法或者类似test1方法报参数错误,但实际定义没错:
如:

def test(a):
  print(a)
a=10
test(a)

运行报下面的错误

test setup failed
file D:\hello\code\7.py, line 22
  def test(a):
E       fixture 'a' not found
>       available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, doctest_namespace, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory
>       use 'pytest --fixtures [testpath]' for help on them.

分析:pycharm的项目应该是自带了test的方法,即可能内置有test方法,所以跑如test(a)时,并没有跑的你定义的test(a),而是内置的那个,所以找不到‘a’。
解决:改个函数名,比如tt(a),或者参考下面方法改环境:

https://blog.csdn.net/qq_27297393/article/details/105308932

问题23发现一个bug,在测试一个算法时发现数字大于1E22时,数字会飘(浮动)导致进程无法结束。
如下面这个你永远跑不完,跑的时候类似这种结果(正常10个数就结束了):
10000000000000000000002995058
10000000000000000000002995059
10000000000000000000002995060

for i in range(10000000000000000000000000000,100000000000000000000000000000):
    #jiouguiyi(i)
    print(i)

解决:换成下面这种形式(注意虽然可以跑完但是结果未必正确):

for i in range(10**28,10**28+10):
    #jiouguiyi(i)
    print(i)

问题24使用re模块如re.compile写pattern时提示重复:
re.error: multiple repeat
分析解决:正则匹配没写对,一种情况是特殊符号没有转义,如匹配 {} 需写成 \{\};
一种是写了+,如

    a='\n123123\n'
    #报错
    pattern = re.compile(r'\n+\d{6}+\n')
    #不报错
    pattern = re.compile(r'\n\d{6}\n')

TypeError: Tuple or struct_time argument required
问题25使用time.strftime时报错。
分析:时间戳——时间元祖;时间元祖——格式化时间 是能相互转换的
但是,时间戳——格式化时间 不能直接相互转换,需要转为时间元祖进行过渡,如下:

#报错
print(time.strftime('%Y-%m-%d',time.time()))

解决:转换一下

#正常
print(time.strftime('%Y-%m-%d',time.localtime(time.time())))
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值