在Perl中,我可以做到:

my ($x, $y) = split /:/, $str;

不管字符串是否包含模式,它都会起作用.

但在Python中,这是行不通的:

a, b = "foo".split(":")  # ValueError: not enough values to unpack

在这种情况下,防止错误的标准方法是什么?

推荐答案

如果你只分为两部分(就像你的例子中那样),你可以用str.partition()来得到一个保证的参数解包大小为3:

>>> a, sep, b = 'foo'.partition(':')
>>> a, sep, b
('foo', '', '')

str.partition()始终返回一个3元组,无论是否找到分隔符.

Python 3的另一种 Select .x使用extended iterable unpacking:

>>> a, *b = 'foo'.split(':')
>>> a, b
('foo', [])

这会将第一个拆分项目分配给a,将剩余项目列表(如果有)分配给b.

Python-3.x相关问答推荐

为什么vs code返回错误—LocaleError:int对象没有属性where,但相同的代码运行在Google Colab上没有任何问题''''

使用Python请求从特定URL下载图像时出错

将列表转换为 pandas 数据框,其中列表包含字典

类变量的Python子类被视为类方法

Django - ValueError:无法将字符串转换为浮点数:''

在 groupby 之后,Pandas 在特定类别中获得最常见和最后的值

Einsum 对于张量乘法很慢

Python defaultdict 在获取时返回 None,尽管使用默认值初始化

在 Django 中执行 JSONRenderer.render(serialized_student_data.data) 时遇到问题

BeautifulSoup 和 pd.read_html - 如何将链接保存到最终数据框中的单独列中?

命名元组内命名元组的 Python 语法

无法在 macOS 上的 Anaconda3 python3.6 上安装 OpenCV3

简单的 get/post 请求在 python 3 中被阻止,但在 python 2 中没有

Python 类型提示语法如何/为什么起作用?

如何在 python 3.x 中禁用 ssl 判断?

计算两个文件的行差异的最有效方法是什么?

在 Alembic 迁移期间更新列内容

警告:请使用 tensorflow/models 中的官方/mnist/dataset.py 等替代方案

TypeError: write() 参数必须是 str,而不是字节(Python 3 vs Python 2)

在动态链接库 Anaconda3\Library\bin\mkl_intel_thread.dll 中找不到序数 242