当前位置: 首页 > 知识库问答 >
问题:

处理字符串时的str.isdigit()行为

阎修明
2023-03-14

假设如下:

>>> square = '²'      # Superscript Two (Unicode U+00B2)
>>> cube  = '³'       # Superscript Three (Unicode U+00B3)
>>> square.isdigit()
True
>>> cube.isdigit()
True
>>> int(square)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '²'
>>> int(cube)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '³'

哦哦!

有人能解释一下str.isdigit()方法在处理字符串时应该有什么行为吗?

共有1个答案

袁开宇
2023-03-14

str.isDigit并不作为int声称与可解析性相关。它报告一个简单的Unicode属性,是十进制字符还是某种数字:

str.isdigit()

如果字符串中的所有字符都是数字且至少有一个字符,则返回true,否则返回false。数字包括十进制字符和需要特殊处理的数字,如兼容性上标数字。这涵盖了不能用来构成以10为基数的数字的数字,如Kharosthi数字。在形式上,数字是具有属性值numeric_type=digit或numeric_type=decimal的字符。

简而言之,str.isdigit对于检测有效数字完全无用。检查给定字符串是否为合法整数的正确解决方案是对其调用int,如果它不是合法整数,则捕获valueError。您所做的其他任何事情都将(糟糕地)重新创建与int()中实际解析代码执行的相同的测试,所以为什么不首先让它来完成这项工作呢?

附带说明:您错误地使用了术语“UTF-8”。UTF-8是Unicode的一种特定编码方式,仅适用于原始二进制数据。Python的str是一种“理想化”的Unicode文本类型;它没有编码(隐藏在下面,它被编码为ASCII、latin-1、UCS-2、UCS-4,可能还有UTF-8之一,但在Python层中,除了sys.getsizeof这样的间接度量之外,这些都不可见,后者只通过让您看到字符串消耗了多少内存来提示底层编码)。您所讨论的字符是ASCII范围以上的简单Unicode字符,它们不是特别的UTF-8字符。

 类似资料:
  • StringBuffer 是一个字符串拼接工具,和java中的StringBuilder类似。对于那些需要大量的字符串连接的时候,用 StringBuffer 更高效一些。它实现了以下API: class StringBuffer { public function __construct($str); public function isEmpty(); publi

  • 字符串在我们平常的Web开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割、连接、转换等操作,本小节将通过Go标准库中的strings和strconv两个包中的函数来讲解如何进行有效快速的操作。 字符串操作 下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档。 func Contains(s, substr string)

  • 函数 说明 Series.str.capitalize() 将 Series / 索引中的字符串转换为大写。 Series.str.cat([others, sep, na_rep, join]) 使用给定的分隔符连接 Series / 索引中的字符串。 Series.str.center(width[, fillchar]) 用附加字符填充 Series / 索引中字符串的左侧和右侧。 Seri

  • 在 Bash 脚本中可以调用字符串处理工具 awk 来替换内置的字符串处理操作。 样例 10-6. 使用另一种方式来截取和定位子字符串 #!/bin/bash # substring-extraction.sh String=23skidoo1 # 012345678 Bash # 123456789 awk # 注意不同字符串索引系统: # Bash 中第一个字符

  • 在DOS中,字符串是一个有序的字符集合,比如:。 编号 字符串操作 描述 1 创建字符串 字符串可以通过以下方式在DOS中创建。 2 空字符串 空的字符串 3 字符串插值 字符串插值是一种通过将常量,变量,文字和表达式中的值包含在字符串文字中来构造新的字符串值的方法。 4 字符串连接 可以使用运算符连接两个字符串,一个字符串和一个字符,或者两个字符。 以下是一个简单的例子,展示了如何使用字符串连接

  • 本节要介绍一些字符串处理的标准库函数。这里介绍的技术适用于开发文本编辑器、字处理器、桌面排版软件、计算机化打字系统和其他文本处理软件。我们这里使用基于指针的字符串,本书稍后还将介绍把字符串作为成熟的对象。 5.12.1 字符与字符串基础 字符是 C++ 编程语言的基本组件。每个程序都是由一系列字符用有意义的方式组合而成的,计算机将其解释为一系列指令,用来完成一组任务。程序可能包含字符常量(char