小编Seb*_*ian的帖子

使用"{0:d}"进行字符串格式化不会转换为整数

这与关于浮点数的这个问题大致相同.

当你有一个可以转换为整数的值时,旧的%d将转换它,但格式不会.

class MyIntegerTenClass:
    def __int__(self):
        return 10
    def __str__(self):
        return 'ten'
ten = MyIntegerTenClass()
print '%d, %02X, %s' % (ten, ten, ten) # ok
print  '{0}'.format(ten) # ok
print  '{0:d}, {0:02X}'.format(ten) # ValueError: Unknown format code 'd' for object of type 'str'
Run Code Online (Sandbox Code Playgroud)

有没有办法修改格式的行为,而不触及要格式化的值的类(没有向__format__该类添加方法)?

编辑:我的目标是获取格式依赖于格式字符串,但不取决于值.因此,如果格式字符串显示"d"或"x",则将值转换为int,然后转换为十进制或十六进制表示.如果格式字符串显示"s",则直接将其转换为字符串.就像老%做的那样.

实际上,我甚__format__至可以在值的类中添加一个方法.但是,如果给定的格式规范是整数格式规范,我该如何检查该方法?无需重新实现内置格式的格式规范解析器.

编辑:这是一个有__format__和例外的解决方案.有更好的想法吗?

class MyIntegerTenClass:
    def __int__(self):
        return 10
    def __str__(self):
        return 'ten'
    def __format__(self, spec):
        fmt = '{0:%s}'%spec
        try:
            return fmt.format(str(self))
        except:
            return …
Run Code Online (Sandbox Code Playgroud)

python string-formatting

6
推荐指数
1
解决办法
5847
查看次数

C4996,fopen弃用:为什么?(不:如何压制)

什么是不安全的,哪个fopen更安全fopen_s

如何以安全的方式使用fopen(如果可能的话)?

(我不想知道如何抑制警告 - 有足够的stackoverflow文章来回答这个问题)

编辑:问题被关闭为"基于意见"(即使只有一个答案,我没有看到太多的意见).我会尝试改写一下:如果有人能够展示微软(不赞成使用该功能)的文档如何/在哪里找到它,这将解释为什么它被弃用会更好.

c fopen tr24731 visual-studio c11

3
推荐指数
1
解决办法
303
查看次数

标签 统计

c ×1

c11 ×1

fopen ×1

python ×1

string-formatting ×1

tr24731 ×1

visual-studio ×1