前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python编程常见出错信息及原因分析(3)

Python编程常见出错信息及原因分析(3)

作者头像
Python小屋屋主
发布2018-04-16 15:42:53
8550
发布2018-04-16 15:42:53
举报
文章被收录于专栏:Python小屋Python小屋

(1)不可哈希错误

演示代码:

>>> x = {[1], [2]} Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> x = {[1], [2]} TypeError: unhashable type: 'list' >>> x = {[1]:1} Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> x = {[1]:1} TypeError: unhashable type: 'list' >>> x = {{'a':97, 'b':98}} Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> x = {{'a':97, 'b':98}} TypeError: unhashable type: 'dict'

错误原因分析与解决方案:

在Python中,可变的数据不可哈希。一般来说我们并不关心一个数据的哈希值,只关心是否可哈希。集合的元素和字典的“键”要求必须为可哈希数据,例如整数、实数、复数、字符串、元组。如果不小心把列表、字典、集合或类似可变(不可哈希)的数据作为字典的“键”或者集合的元素,会抛出“不可哈希”错误,这种用法要坚决避免。

(2)数据数量不一致错误

在调用函数时,要求实参数量和形参必须数量一致,即使函数有默认值参数,这个要求也是必须满足的,只是有些形参有默认值,所以表面看起来实参数量和形参数量不是完全一样。

>>> def func(a, b, c=5): return a+b+c

>>> func(3) Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> func(3) TypeError: func() missing 1 required positional argument: 'b' >>> func(3, 5, 7, 9) Traceback (most recent call last): File "<pyshell#21>", line 1, in <module> func(3, 5, 7, 9) TypeError: func() takes from 2 to 3 positional arguments but 4 were given

一个比较类似的是序列解包的用法。例如,下面的代码没有任何问题:

>>> x = 3, 5, 7 >>> x (3, 5, 7)

因为第一个语句中,虽然等号右侧并没有加什么括号,但实际上是作为元组处理的,也就是,把等号右侧的元组(3, 5, 7)赋值给左侧的变量x。

但是,下面的语句是错误:

>>> x, y = 3, 5, 7 Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> x, y = 3, 5, 7 ValueError: too many values to unpack (expected 2)

这是因为等号左侧有两个变量,右侧必须有两个值才行,但是现在给了3个,Python解释器就懵了,不知道该怎么办,只好抛出异常。

然而,下面的代码是可以正常执行的:

>>> x, *y = 3, 5, 7 >>> x 3 >>> y [5, 7] >>> x, *y = 3, 5, 7, 9, 11, 13 >>> x 3 >>> y [5, 7, 9, 11, 13]

这是因为等号左侧的变量y前面有个星号*,这有点类似于函数调用时的可变长度参数,带星号*的变量或形参有“收集剩余位置实参或数值”的作用

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档