Python 值将数字转换为8位格式时出错

Python 值将数字转换为8位格式时出错,python,string,integer,Python,String,Integer,我想用完整的8位格式打印二进制数0x00到0xFF bin()Python函数不会返回完整的8位,因此我需要使用format函数格式化二进制字符串 下面的代码给了我一个ValueError,但是我正在将一个二进制字符串传递给format函数,并且我正在使用08b,那么为什么它会给出一个错误呢 a = bin(10); a_bin = "{0:08b}".format(a); 使用数字,而不是字符串: >>> "{0:08b}".format(10) '00001010' 要

我想用完整的8位格式打印二进制数0x00到0xFF

bin()
Python函数不会返回完整的8位,因此我需要使用
format
函数格式化二进制字符串

下面的代码给了我一个
ValueError
,但是我正在将一个二进制字符串传递给format函数,并且我正在使用
08b
,那么为什么它会给出一个错误呢

a = bin(10);
a_bin = "{0:08b}".format(a);

使用数字,而不是字符串:

>>> "{0:08b}".format(10)
'00001010'
要打印所有:

>>> for i in range(0, 256):
...     print("{0:08b}".format(i))
...
00000000
00000001
00000010
00000011
00000100
...
11111011
11111100
11111101
11111110
11111111

bin
将返回一个字符串,您不能将字符串格式化为数字。这就是为什么异常消息说它是字符串的未知格式:

>>> "{0:08b}".format(bin(10))
ValueError: Unknown format code 'b' for object of type 'str'
您必须使用整数作为格式的输入:

>>> "{0:08b}".format(10)
'00001010'

我知道这会是一件小事。非常感谢。我仍在努力掌握这种语言,但由于缺少键入,我感到有点不舒服。@jm123456如果确实需要,可以使用Mypy进行静态类型检查。但是它不能告诉你与你已经看到的类型错误有什么不同(即使在Haskell或Rust中也是如此);它只会在编译时发生,而不是在一秒钟后发生,因此不确定这会对您有什么帮助。@abarnert它与我编写的代码实际上有着明显的不同,但出于某种原因,我觉得在用Python编写代码时,我的思维模式与用Java之类的类型化语言编写代码时有所不同。由于我习惯于强类型,我发现没有它很难编写代码,因此编写Python代码就更难了。@jm123456 Python是一种类型化语言,事实上它的类型比Java强得多,而不是弱得多。区别在于静态类型(或静态类型检查)。而且,从3.5开始,Python是可选的静态类型,Mypy是检查它的“幸运”方式。(这在很大程度上是因为Guido发现,无论静态检查对大多数编码是否有用,当2.7代码中充满字符串操作时,它对将2.7代码移植到3.x肯定很有用,这恰好是他的团队当时正在做的事情。)此外,许多IDE现在可以像java一样在Python中执行静态的检查。@ JM123566,您也可能想考虑将一个类代码<代码> FLAKE8/COD>添加到您的工作流程中(也许是用飞毯)来捕获不是实际类型错误但仍然静态检测的常见问题。(Python的静态类型更像Java,而不是Haskell或Rust,并且不试图表示可以合理地进行静态检查的所有内容,只表示OO开发人员倾向于认为是类型的东西。)