初学Python常见异常错误,总有一处你会遇到!

恋习Python

共 4677字,需浏览 10分钟

 ·

2019-10-06 23:20

c0e53e762ed34c02af83f073856a362b.webp

初学Python常见错误

  1. 忘记写冒号

  2. 误用=

  3. 错误 缩紧

  4. 变量没有定义

  5. 中英文输入法导致的错误

  6. 不同数据类型的拼接

  7. 索引位置问题

  8. 使用字典中不存在的键

  9. 忘了括号

  10. 漏传参数

  11. 缺失依赖库

  12. 使用了python中对关键词

  13. 编码问题

1. 忘记写冒号

在 if、elif、else、for、while、def语句后面忘记添加 :

  1. age = 42

  2. if age == 42

  3. print('Hello!')

  1. File"", line 2

  2. if age == 42

  3. ^

  4. SyntaxError: invalid syntax

2. 误用 =

= 是赋值操作,而判断两个值是否相等是 ==

  1. gender = '男'

  2. if gender = '男':

  3. print('Man')

  1. File"", line 2

  2. if gender = '男':

  3. ^

  4. SyntaxError: invalid syntax

3. 错误的缩进

Python用缩进区分代码块,常见的错误用法:

  1. print('Hello!')

  2. print('Howdy!')

  1. File"", line 2

  2. print('Howdy!')

  3. ^

  4. IndentationError: unexpected indent

  1. num = 25

  2. if num == 25:

  3. print('Hello!')

  1. File"", line 3

  2. print('Hello!')

  3. ^

  4. IndentationError: expected an indented block

4. 变量没有定义

  1. if city in ['New York', 'Bei Jing', 'Tokyo']:

  2. print('This is a mega city')

  1. ---------------------------------------------------------------------------


  2. NameErrorTraceback (most recent call last)


  3. 22-a81fd2e7a0fd> in

  4. ----> 1if city in ['New York', 'Bei Jing', 'Tokyo']:

  5. 2print('This is a mega city')

  1. NameError: name 'city'isnotdefined

5. 中英文输入法导致的错误

  • 英文冒号

  • 英文括号

  • 英文逗号

  • 英文单双引号

  1. if5>3

  2. print('5比3大')

  1. File"", line 1

  2. if5>3

  3. ^

  4. SyntaxError: invalid character in identifier

  1. if5>3:

  2. print('5比3大'

  1. File"", line 2

  2. print('5比3大'

  3. ^

  4. SyntaxError: invalid character in identifier

  1. spam = [1, 23]

  1. File"", line 1

  2. spam = [1, 23]

  3. ^

  4. SyntaxError: invalid character in identifier

  1. if5>3:

  2. print('5比3大‘)

  1. File"", line 2

  2. print('5比3大‘)

  3. ^

  4. SyntaxError: EOL while scanning string literal

6. 不同数据类型的拼接

字符串/列表/元组 支持拼接

字典/集合不支持拼接

  1. 'I have ' + 12 + ' eggs.'

  2. #'I have {} eggs.'.format(12)

  1. ---------------------------------------------------------------------------


  2. TypeErrorTraceback (most recent call last)


  3. 29-20c7c89a2ec6> in

  4. ----> 1'I have ' + 12 + ' eggs.'

  1. TypeError: can only concatenate str (not"int") to str

  1. ['a', 'b', 'c']+'def'

  1. ---------------------------------------------------------------------------


  2. TypeErrorTraceback (most recent call last)


  3. 31-0e8919333d6b> in

  4. ----> 1 ['a', 'b', 'c']+'def'

  1. TypeError: can only concatenate list (not"str") to list

  1. ('a', 'b', 'c')+['a', 'b', 'c']

  1. ---------------------------------------------------------------------------


  2. TypeErrorTraceback (most recent call last)


  3. 33-90742621216d> in

  4. ----> 1 ('a', 'b', 'c')+['a', 'b', 'c']

  1. TypeError: can only concatenate tuple (not"list") to tuple

  1. set(['a', 'b', 'c'])+set(['d', 'e'])

  1. ---------------------------------------------------------------------------


  2. TypeErrorTraceback (most recent call last)


  3. 35-ddf5fb1e6c8c> in

  4. ----> 1set(['a', 'b', 'c'])+set(['d', 'e'])

  1. TypeError: unsupported operand type(s) for +: 'set'and'set'

  1. grades1 = {'Mary':99, 'Henry':77}

  2. grades2 = {'David':88, 'Unique':89}


  3. grades1+grades2

  1. ---------------------------------------------------------------------------


  2. TypeErrorTraceback (most recent call last)


  3. 36-1b1456844331> in

  4. 2 grades2 = {'David':88, 'Unique':89}

  5. 3

  6. ----> 4 grades1+grades2

  1. TypeError: unsupported operand type(s) for +: 'dict'and'dict'

7. 索引位置问题

  1. spam = ['cat', 'dog', 'mouse']

  2. print(spam[5])

  1. ---------------------------------------------------------------------------


  2. IndexErrorTraceback (most recent call last)


  3. 38-e0a79346266d> in

  4. 1 spam = ['cat', 'dog', 'mouse']

  5. ----> 2print(spam[5])

  1. IndexError: list index out of range

8. 使用字典中不存在的键

在字典对象中访问 key 可以使用 []

但是如果该 key 不存在,就会导致:KeyError: 'zebra'

  1. spam = {'cat': 'Zophie',

  2. 'dog': 'Basil',

  3. 'mouse': 'Whiskers'}


  4. print(spam['zebra'])

  1. ---------------------------------------------------------------------------


  2. KeyErrorTraceback (most recent call last)


  3. 39-92c9b44ff034> in

  4. 3'mouse': 'Whiskers'}

  5. 4

  6. ----> 5print(spam['zebra'])

  1. KeyError: 'zebra'

为了避免这种情况,可以使用 get 方法

  1. spam = {'cat': 'Zophie',

  2. 'dog': 'Basil',

  3. 'mouse': 'Whiskers'}


  4. print(spam.get('zebra'))

  1. None

key 不存在时,get 默认返回 None

9. 忘了括号

当函数中传入的是函数或者方法时,容易漏写括号

  1. spam = {'cat': 'Zophie',

  2. 'dog': 'Basil',

  3. 'mouse': 'Whiskers'}


  4. print(spam.get('zebra')

  1. File"", line 5

  2. print(spam.get('zebra')

  3. ^

  4. SyntaxError: unexpected EOF while parsing

10. 漏传参数

  1. def diyadd(x, y, z):

  2. return x+y+z


  3. diyadd(1, 2)

  1. ---------------------------------------------------------------------------


  2. TypeErrorTraceback (most recent call last)


  3. 44-7184f3f906ca> in

  4. 2return x+y+z

  5. 3

  6. ----> 4 diyadd(1, 2)

  1. TypeError: diyadd() missing 1 required positional argument: 'z'

11. 缺失依赖库

电脑中没有相关的库

12. 使用了python中的关键词

如try、except、def、class、object、None、True、False等

  1. try = 5

  2. print(try)

  1. File"", line 1

  2. try = 5

  3. ^

  4. SyntaxError: invalid syntax

  1. def = 6

  2. print(6)

  1. File"", line 1

  2. def = 6

  3. ^

  4. SyntaxError: invalid syntax

13. 文件编码问题

  1. import pandas as pd


  2. df = pd.read_csv('data/twitter情感分析数据集.csv')

  3. df.head()

尝试encoding编码参数传入utf-8、gbk

  1. df = pd.read_csv('data/twitter情感分析数据集.csv', encoding='utf-8')

  2. df.head()

都报错说明编码不是utf-8和gbk,而是不常见都编码,这里我们需要传入正确都encoding,才能让程序运行。

python有个chardet库,专门用来侦测编码。

  1. import chardet


  2. binary_data = open('data/twitter情感分析数据集.csv', 'rb').read()

  3. chardet.detect(binary_data)

  1. {'encoding': 'Windows-1252', 'confidence': 0.7291192008535122, 'language': ''}

浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报