python 常见错误和常用知识点

本文详细解析了Python编程中常见的UnicodeDecodeError、IndexError、ValueError和TypeError等错误,提供了解决方案。此外,介绍了计算机中负数的补码表示法,包括原码、反码和补码的概念及转换示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、常见错误

1)、UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 33: illegal multibyte sequence

Traceback (most recent call last):
  File "G:\code\20210423\Experiment.py", line 40, in loadParas
    paraDic = json.load(fpara)
  File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 293, in load
    return loads(fp.read(),
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 33: illegal multibyte sequence
python-BaseException

原因:编码方式出错
方案:以 encoding=‘UTF-8’ 编码方式进行读操作,对应行修改为:

with open(self.chipParasAddr,'r',encoding='UTF-8') as fpara:

2)、IndexError: list index out of range

Traceback (most recent call last):
  File "G:\code\20210423\PreProcessor.py", line 69, in generateWorkPatternDataFile
    f.write(oriPattern[int(workPage[i])])
IndexError: list index out of range

原因:数组越界
方案:查看对应代码,int(workPage[i]) 超过了 oriPattern 的长度。

3)、ValueError: invalid literal for int() with base 10: '-3.466’

int(’-3.466’)
分析:int() 函数只能对纯数字的字符串操作;
解决方案:修改为float,然后调用round

4)、TypeError: ‘int’ object is not callable

round(float(’-3.466’))
分析:类型错误。该错误的意思是Int型的对象是不可调用的(not callable)。Google后才发现,这个错误之所以发生,是因为我变量名和函数名写重复了!函数的形参也用了 round,和这里的round函数冲突了,将形参修改后就运行正常了。

2、相关知识

1)、补码

bin(-5 & 0xffffffff)
'0b11111111111111111111111111111011'

2)、负数表示

bin(((1 << 32) - 1) & -5)
'0b11111111111111111111111111111011'

3)、常用补码
计算机中的有符号数有三种表示方法,即原码反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同 [1] 。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 [2]
-16的原码是: 10010000(最高位1,后n-1位是其绝对值16的二进制表示) 其反码为11101111(最高的符号位不变,后n-1位全部取反) 其补码为11110000(反码加1)

-1 原码是1,0000001 反码是1,1111110 补码 1,1111111 (FF)
-2 原码是1,0000010 反码是1,1111101 补码 1,1111110 (FE)
-3 原码是1,000 0011反码是1,1111100 补码 1,1111101 (FD)
-4 原码是 1,000 0100反码是1,1111011 补码 1,1111100 (FC)
-5 原码是1,0000101 反码是1,1111010 补码 1,1111011 (FB)
-6 原码是 1,0000110 反码是1,1111001 补码 1,1111010 (FA)
-7 原码是 1,0000111 反码是1,1111000 补码 1,1111001 (F9)
-8 原码是 1,0001000 反码是1,1110111 补码 1,1111000 (F8)
-9 原码是 1,0001001 反码是1,1110110 补码 1,1110111 (F7)
-10 原码是1,0001010 反码是 1,1110101 补码 1,1110110(F6)
-11 原码是1,0001011 反码是 1,1110100 补码 1,1110101(F5)
-12 原码是1,0001100 反码是 1,1110011 补码 1,1110100(F4)
-13 原码是1,0001101 反码是 1,1110010 补码 1,1110011(F3)
-14 原码是1,0001110 反码是 1,1110001 补码 1,1110010(F2)
-15 原码是10001111 反码是11110000 补码11110001(F1)
-16 原码是10010000 反码是11101111 补码11110000(F0)
-17 原码是10010001 反码是 11101110 补码 11101111(EF)
-18 原码是10010010 反码是 11101101 补码 11101110(EE)
-19 原码是10010011 反码是 11101100 补码 11101101(ED)
-20 原码是 1001 0100 反码是 1110 1011 补码1110 1100(EC)
-21 原码是 1001 0101 反码是 1110 1010 补码1110 1011(EB)
-22 EA
-23 E9
-24 E8
-25 E7
-26 E6
-27 E5
-28 E4
-29 E3
-30 E2
-31 E1
-32 E0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值