CDA持证人阿涛哥

2020-09-02   阅读量: 10282

Python

学习Python函数时常见的报错类型

扫码加入数据分析学习群

问题:

学习Python函数时常见的报错类型有哪些?


答案

下面我们总结一些我们学习函数时常见的报错类型:

# 缺少英文括号后的英文冒号
def func1()
  print('Hello World')
# 报错:SyntaxError: bad input on line 1
# (语法错误:第 1 行输入有问题)

1,SyntaxError 的意思是“语法错误”,而冒号后面的是语法错误的细节。这个例子中的具体细节为 bad input,一般来说就是你输入的代码不符合格式,可能多打或少打了一些必要的字母或者标点。最后的 on line xxx 意思是在哪一行发现的错误,这也有助于你直接去定位。

# 输入了中文标点(本例中输入了中文冒号)
def func2():
  print('Hello World')
#报错:SyntaxError: invalid character in identifier
#(语法错误:识别不了不支持的字符)

2,这里的语法错误细节是 invalid character,也就是 Python 语法中不支持的字符。除字符串和注释外,Python 语法里支持的字符是不支持汉字和中文标点的。

这里的例子中输入了中文的冒号,Python 当然识别不了啦。所以一定要注意,见到 invalid character 就要看看是不是把括号、冒号、引号等输入错啦,平时写代码时,我们也要预先把输入法调好。

# y = 2 缩进错误
def func3():
  x = 1
 y = 2
# 报错:IndentationError: unindent does not match any outer indentation level
# (缩进错误:(y = 2 这一行)缩进变小了,但是其它地方匹配不到和他一样的缩进层级)

3,IndentationError 指“缩进错误”。“indentation” 和“indent” 表示缩进,“unindent” 表示“减少或取消缩进”。我们在第五关中说过,Python 非常注重缩进的层次,一旦确定了缩进层次,后面就要统一。一开始用两个或者四个空格作为一个缩进,后面也需要一直保持一样的标准,否则机器就会识别错乱。

比如这个例子中,第 2 行 x = 1 用两个空格表示一个缩进,但第 3 行 y = 2 中变成了一个空格缩进,发生了报错语句所说的“unindent”,但在其它代码行中,找不到同样是 1 个空格表示缩进的地方,所以报错了。

# 默认参数应该放在位置参数后
def func4(x, y = 1, z):
  print(x, y, z)
# 报错:SyntaxError: non-default argument follows default argument
# (语法错误:非默认参数被放到了默认参数后面)

4,这里的语法错误细节中的关键词是“argument”,意思是“参数”。“default argument” 表示“默认参数”。当你看到“arguement”,就要去检查函数定义过程中,参数有没有出错啦。

# 全局作用域不能访问局部变量
def func5():
  x = 1print(x)
# 报错:NameError: name 'x' is not defined
# (变量名错误:变量名 'x' 没有被定义)

5,这个例子我们在第六关中说过了,局部变量被函数这堵“围墙”隔得严严实实。在函数外,不用 global 语句,是无法访问函数内的局部变量的。

通过以上的代码,你有没有发现,虽然这些代码写的时候有错,但我们也能读懂写代码的人要干什么,这就是人脑在综合处理中比电脑强大得多的证明。

所以,还是一句话,报错的主要原因是机器太笨不会变通,我们要迁就它。我们可以阅读报错的具体信息,回到出错代码中对症下药、及时修改,让函数正常运行,达成程序员日常生活中不可或缺的 debug 成就。

同时我们也要留心报错的内容,将报错信息复制下来,在网上搜索并记住报错的具体所指,下次遇到类似的问题也可以从容应对。


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
33.5795 3 1 关注作者 收藏

评论(1)

CDA持证人阿涛哥
2020-09-02

答案

下面我们总结一些我们学习函数时常见的报错类型:

# 缺少英文括号后的英文冒号
def func1()
print('Hello World')
# 报错:SyntaxError: bad input on line 1
# (语法错误:第 1 行输入有问题)

1,SyntaxError 的意思是“语法错误”,而冒号后面的是语法错误的细节。这个例子中的具体细节为 bad input,一般来说就是你输入的代码不符合格式,可能多打或少打了一些必要的字母或者标点。最后的 on line xxx 意思是在哪一行发现的错误,这也有助于你直接去定位。

# 输入了中文标点(本例中输入了中文冒号)
def func2():
print('Hello World')
#报错:SyntaxError: invalid character in identifier
#(语法错误:识别不了不支持的字符)

2,这里的语法错误细节是 invalid character,也就是 Python 语法中不支持的字符。除字符串和注释外,Python 语法里支持的字符是不支持汉字和中文标点的。

这里的例子中输入了中文的冒号,Python 当然识别不了啦。所以一定要注意,见到 invalid character 就要看看是不是把括号、冒号、引号等输入错啦,平时写代码时,我们也要预先把输入法调好。

# y = 2 缩进错误
def func3():
x = 1
y = 2
# 报错:IndentationError: unindent does not match any outer indentation level
# (缩进错误:(y = 2 这一行)缩进变小了,但是其它地方匹配不到和他一样的缩进层级)

3,IndentationError 指“缩进错误”。“indentation” 和“indent” 表示缩进,“unindent” 表示“减少或取消缩进”。我们在第五关中说过,Python 非常注重缩进的层次,一旦确定了缩进层次,后面就要统一。一开始用两个或者四个空格作为一个缩进,后面也需要一直保持一样的标准,否则机器就会识别错乱。

比如这个例子中,第 2 行 x = 1 用两个空格表示一个缩进,但第 3 行 y = 2 中变成了一个空格缩进,发生了报错语句所说的“unindent”,但在其它代码行中,找不到同样是 1 个空格表示缩进的地方,所以报错了。

# 默认参数应该放在位置参数后
def func4(x, y = 1, z):
print(x, y, z)
# 报错:SyntaxError: non-default argument follows default argument
# (语法错误:非默认参数被放到了默认参数后面)

4,这里的语法错误细节中的关键词是“argument”,意思是“参数”。“default argument” 表示“默认参数”。当你看到“arguement”,就要去检查函数定义过程中,参数有没有出错啦。

# 全局作用域不能访问局部变量
def func5():
x = 1print(x)
# 报错:NameError: name 'x' is not defined
# (变量名错误:变量名 'x' 没有被定义)

5,这个例子我们在第六关中说过了,局部变量被函数这堵“围墙”隔得严严实实。在函数外,不用 global 语句,是无法访问函数内的局部变量的。

通过以上的代码,你有没有发现,虽然这些代码写的时候有错,但我们也能读懂写代码的人要干什么,这就是人脑在综合处理中比电脑强大得多的证明。

所以,还是一句话,报错的主要原因是机器太笨不会变通,我们要迁就它。我们可以阅读报错的具体信息,回到出错代码中对症下药、及时修改,让函数正常运行,达成程序员日常生活中不可或缺的 debug 成就。

同时我们也要留心报错的内容,将报错信息复制下来,在网上搜索并记住报错的具体所指,下次遇到类似的问题也可以从容应对。



0.0000 0 0 回复
CDA持证人阿涛哥
2020-09-02

答案

下面我们总结一些我们学习函数时常见的报错类型:

# 缺少英文括号后的英文冒号
def func1()
  print('Hello World')
# 报错:SyntaxError: bad input on line 1
# (语法错误:第 1 行输入有问题)

1,SyntaxError 的意思是“语法错误”,而冒号后面的是语法错误的细节。这个例子中的具体细节为 bad input,一般来说就是你输入的代码不符合格式,可能多打或少打了一些必要的字母或者标点。最后的 on line xxx 意思是在哪一行发现的错误,这也有助于你直接去定位。

# 输入了中文标点(本例中输入了中文冒号)
def func2():
  print('Hello World')
#报错:SyntaxError: invalid character in identifier
#(语法错误:识别不了不支持的字符)

2,这里的语法错误细节是 invalid character,也就是 Python 语法中不支持的字符。除字符串和注释外,Python 语法里支持的字符是不支持汉字和中文标点的。

这里的例子中输入了中文的冒号,Python 当然识别不了啦。所以一定要注意,见到 invalid character 就要看看是不是把括号、冒号、引号等输入错啦,平时写代码时,我们也要预先把输入法调好。

# y = 2 缩进错误
def func3():
  x = 1
 y = 2
# 报错:IndentationError: unindent does not match any outer indentation level
# (缩进错误:(y = 2 这一行)缩进变小了,但是其它地方匹配不到和他一样的缩进层级)

3,IndentationError 指“缩进错误”。“indentation” 和“indent” 表示缩进,“unindent” 表示“减少或取消缩进”。我们在第五关中说过,Python 非常注重缩进的层次,一旦确定了缩进层次,后面就要统一。一开始用两个或者四个空格作为一个缩进,后面也需要一直保持一样的标准,否则机器就会识别错乱。

比如这个例子中,第 2 行 x = 1 用两个空格表示一个缩进,但第 3 行 y = 2 中变成了一个空格缩进,发生了报错语句所说的“unindent”,但在其它代码行中,找不到同样是 1 个空格表示缩进的地方,所以报错了。

# 默认参数应该放在位置参数后
def func4(x, y = 1, z):
  print(x, y, z)
# 报错:SyntaxError: non-default argument follows default argument
# (语法错误:非默认参数被放到了默认参数后面)

4,这里的语法错误细节中的关键词是“argument”,意思是“参数”。“default argument” 表示“默认参数”。当你看到“arguement”,就要去检查函数定义过程中,参数有没有出错啦。

# 全局作用域不能访问局部变量
def func5():
  x = 1print(x)
# 报错:NameError: name 'x' is not defined
# (变量名错误:变量名 'x' 没有被定义)

5,这个例子我们在第六关中说过了,局部变量被函数这堵“围墙”隔得严严实实。在函数外,不用 global 语句,是无法访问函数内的局部变量的。

通过以上的代码,你有没有发现,虽然这些代码写的时候有错,但我们也能读懂写代码的人要干什么,这就是人脑在综合处理中比电脑强大得多的证明。

所以,还是一句话,报错的主要原因是机器太笨不会变通,我们要迁就它。我们可以阅读报错的具体信息,回到出错代码中对症下药、及时修改,让函数正常运行,达成程序员日常生活中不可或缺的 debug 成就。

同时我们也要留心报错的内容,将报错信息复制下来,在网上搜索并记住报错的具体所指,下次遇到类似的问题也可以从容应对。



32.2574 1 0 回复

推荐课程