Python去掉字符串中的字符,仅保留数字(ValueError: invalid literal for int() with base 10: "b'960")

本文介绍了一种在Python中使用int()函数时遇到的常见错误及其解决方案。错误源于尝试将包含非数字字符的字符串转换为整数。文章详细解释了如何使用正则表达式去除字符串中的非数字字符,并提供了具体的代码示例。
部署运行你感兴趣的模型镜像

博主在运行程序的过程中遇到了如上问题,在此记录下解决方式和产生这个问题的原因。更新于2019.01.05。

解决方式

首先给出解决方式(即去掉字符串中的字符,仅保留数字)。找到报错的那一行中调用了int(string)语句的地方,将其改为int(re.sub("\D","",string)),即去掉所有非数字的字符。具体可以参考下面的例子:

原语句:

dim_list = [int(dimstr) for dimstr in str(subprocess.check_output([img_size_bin, filename])).split(',')]

修改为:

dim_list = [int(re.sub("\D","",dimstr)) for dimstr in str(subprocess.check_output([img_size_bin, filename])).split(',')]

产生原因

首先,Python中用int进行类型转换的要求是被转换的对象中不包括字符,比如:

int("1234")
>> 1234

但是如果用int("abc1234")就会报错(如题)。

这里博主遇到的情况是,Python在输出的时候将之前的类型也保留了。这里就需要明确Python的几种前缀。其中,b'这个前缀表示的是bytes类型的数据。然而,博主并不希望留下这个前缀,因此就用到了前面所说的去除非数字的命令:

re.sub("\D","",string)

其中,\D表示的是非数字(Digit),后面的string是需要处理的字符串。

注意,如果用这个命令,最开头要包含re工具包:

import re

更多内容,欢迎加入星球讨论。
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 常见原因分析 在使用 `int()` 函数将字符串转换为整数时,如果字符串内容不是合法的数字格式,会引发 `ValueError: invalid literal for int() with base 10` 错误。例如,尝试将包含非数字字符字符串转换为整数会导致此错误: ```python int("Hello") # ValueError: invalid literal for int() with base 10: 'Hello' [^1] ``` 此外,在尝试读取文件内容并直接转换为整数时,如果文件中包含非数字内容(如换行符 `\n` 或文本),也会引发类似的错误: ```python # 假设文件内容为 'test\n' with open("test2.py", "r") as f: print(int(f.read())) # ValueError: invalid literal for int() with base 10: 'test\n' [^2] ``` --- ### 解决方案 #### 1. **检查字符串内容** 确保要转换为整数的字符串包含数字字符,不包含空格、换行符、字母或其他非数字字符。可以使用 `str.isdigit()` 方法进行检查: ```python s = "123" if s.isdigit(): num = int(s) else: print("字符串包含非数字字符") ``` #### 2. **去除空白字符** 如果字符串中可能包含换行符或空格,可以使用 `str.strip()` 去除前后空白字符后再进行转换: ```python s = " 123\n" s_clean = s.strip() num = int(s_clean) ``` #### 3. **使用异常处理** 为了避免程序因无效输入而崩溃,可以使用 `try-except` 结构捕获 `ValueError` 异常: ```python s = "abc" try: num = int(s) except ValueError: print("无法将字符串转换为整数") ``` #### 4. **处理文件读取** 在读取文件内容时,确保只提取其中的数字部分,或在转换前进行清理: ```python with open("data.txt", "r") as f: content = f.read().strip() if content.isdigit(): num = int(content) else: print("文件内容不合法") ``` #### 5. **正则表达式提取数字** 如果字符串中包含混合字符,可以使用正则表达式提取其中的数字部分: ```python import re s = "年龄:25岁" match = re.search(r'\d+', s) if match: num = int(match.group()) print(num) # 输出 25 ``` --- ### 总结 `ValueError: invalid literal for int() with base 10` 错误通常由非法字符串转换引发,解决的关键在于确保输入字符串符合整数格式要求。可以通过检查、清理字符串内容,或使用异常处理机制来增强程序的健壮性。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值