Lac*_*bus 16 python python-3.x
假设如下:
\n>>> square = '\xc2\xb2' # Superscript Two (Unicode U+00B2)\n>>> cube = '\xc2\xb3' # Superscript Three (Unicode U+00B3)\n
Run Code Online (Sandbox Code Playgroud)\n奇怪的是:
\n>>> square.isdigit()\nTrue\n>>> cube.isdigit()\nTrue\n
Run Code Online (Sandbox Code Playgroud)\n好的,让我们将这些“数字”转换为整数:
\n>>> int(square)\nTraceback (most recent call last):\n File "<stdin>", line 1, in <module>\nValueError: invalid literal for int() with base 10: '\xc2\xb2'\n>>> int(cube)\nTraceback (most recent call last):\n File "<stdin>", line 1, in <module>\nValueError: invalid literal for int() with base 10: '\xc2\xb3'\n
Run Code Online (Sandbox Code Playgroud)\n哎呀!
\n有人可以解释一下我应该期待什么行为吗str.isdigit()
在处理字符串时我应该从该方法中得到什么行为吗?
Sha*_*ger 20
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 编码方式,仅适用于原始二进制数据。Pythonstr
是一种“理想化”的 Unicode 文本类型;它没有编码(在底层,它存储编码为 ASCII、latin-1、UCS-2、UCS-4 和可能还有 UTF-8 之一,但除了间接测量之外,这些在 Python 层中都不可见就像sys.getsizeof
,它只是通过让您查看字符串消耗了多少内存来暗示底层编码)。您所讨论的字符是 ASCII 范围以上的简单 Unicode 字符,它们并不是专门的 UTF-8。
归档时间: |
|
查看次数: |
1216 次 |
最近记录: |