Python strip 内置方法使用上的误区

简介: 最近在调查配置问题过程中,发现一个比较低级的错误,应该是 python 使用习惯的问题,和大家分享一下,比较有意思。问题介绍在系统的配置脚本中有一句这样的逻辑:# etcd_nodes like this: 'http://172.16.1.1:2380'etcd_nodes.append(etcd_node_host.rstrip(':2380').lstrip('http://'))我们预期的结果当然是获取到 '172.16.1.1' 这个 IP 地址。

最近在调查配置问题过程中,发现一个比较低级的错误,应该是 python 使用习惯的问题,和大家分享一下,比较有意思。

问题介绍

在系统的配置脚本中有一句这样的逻辑:

# etcd_nodes like this: 'http://172.16.1.1:2380'
etcd_nodes.append(etcd_node_host.rstrip(':2380').lstrip('http://'))

我们预期的结果当然是获取到 '172.16.1.1' 这个 IP 地址。但是在实际使用的时候,遇到了这样的问题:

image.png

分析一下原因

我们先来看下 python 内置方法 strip 这类方法的定义了实现,官方定义:

    def rstrip(self, chars=None): # real signature unknown; restored from __doc__
        """
        S.rstrip([chars]) -> string or unicode
        
        Return a copy of the string S with trailing whitespace removed.
        If chars is given and not None, remove characters in chars instead.
        If chars is unicode, S will be converted to unicode before stripping
        """
        return ""

参数中的 chars 是字符的list,不是字符串匹配,这个字符的作用怎么理解呢?举个例子,

>>> a='test it 888888888'
>>> print a.rstrip('8')
test it
>>> a='test it8 888888888'
>>> print a.rstrip('8')
test it8

简单的说,就是匹配到最后一个不是给定 chars 的字符就停止。
那么如果传入的参数是一个字符串呢:

>>> a='test it887878888888'  
>>> print a.rstrip('78')
test it

所以,这样的匹配其实就是匹配到最后一个不是 chars 这个数组中任意的一个字符为止。

这样,就能解释为什么前面的 rstrip(':2380') 对 'http://172.1.1.2:2380' 的结果是 'http://172.1.1.' 的原因
了。

结论

对于像 strip, rstrip, lstrip 这样最基本、简单的功能,还是需要了解清楚其使用方法,不能因为一次试用成功就以为满足功能需求了。这样的误用,如果上线,危害还是比较大的。

相关文章
|
6月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
512 1
|
7月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
267 2
|
7月前
|
调度 Python
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
216 0
|
7月前
|
传感器 大数据 API
Python数字限制在指定范围内:方法与实践
在Python编程中,限制数字范围是常见需求,如游戏属性控制、金融计算和数据过滤等场景。本文介绍了五种主流方法:基础条件判断、数学运算、装饰器模式、类封装及NumPy数组处理,分别适用于不同复杂度和性能要求的场景。每种方法均有示例代码和适用情况说明,帮助开发者根据实际需求选择最优方案。
357 0
|
7月前
|
Python
Python字符串center()方法详解 - 实现字符串居中对齐的完整指南
Python的`center()`方法用于将字符串居中,并通过指定宽度和填充字符美化输出格式,常用于文本对齐、标题及表格设计。
|
6月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
1014 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
7月前
|
机器学习/深度学习 数据采集 算法
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
399 4
|
6月前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
204 0
|
7月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
405 0
|
8月前
|
数据管理 开发工具 索引
在Python中借助Everything工具实现高效文件搜索的方法
使用上述方法,你就能在Python中利用Everything的强大搜索能力实现快速的文件搜索,这对于需要在大量文件中进行快速查找的场景尤其有用。此外,利用Python脚本可以灵活地将这一功能集成到更复杂的应用程序中,增强了自动化处理和数据管理的能力。
697 0

热门文章

最新文章

推荐镜像

更多