【问题标题】:How to return an integer in a %u string?如何在 %u 字符串中返回一个整数?
【发布时间】:2020-09-04 16:30:46
【问题描述】:

我正在用 Python 实现代码,但我必须使用以前实现的代码。使用继承的代码在其 HTML 中显示整数时遇到问题。

out.append(
   """<td align="right">%u us</td><td align="right">%u us</td><td align="right">%u us</td><td align="right"><a style="cursor:default" title="average block size: %u B">%u</a></td><td align="right"><a style="cursor:default" title="average block size: %u B">%u</a></td><td align="right">%u</td>"""
   % (rtime,wtime,fsynctime,rbsize,rops,wbsize,wops,fsyncops,)
)

这段代码给了我这个错误:

Traceback (most recent call last):
File ".../disks_tab.py", line 652, in disks
fsyncops,
TypeError: %u format: a number is required, not str

我尝试像这样强制 var 类型:

if fsyncops == "-":
   fsyncops = 0

就在 out.append... 代码的正上方。字符串“-”是变量实际存储的内容。

它仍然不工作,我得到同样的错误。

【问题讨论】:

  • fsyncops 正在以%d 格式打印,而不是%u
  • 所以其他变量之一导致了这个错误,尽管%d 也需要一个数字。
  • print((rtime,wtime,fsynctime,rbsize,rops,wbsize,wops,fsyncops)) 显示什么?
  • 请不要那样做。我们希望为您提供帮助,但如果错误消息引用了不同版本的代码,就会很困难。
  • 对于复杂的格式字符串,错误将指向不正确的值,而只是其中一个值。显示的行号和显示的变量名都不意味着它是正是那个变量——任何元组都可能失败。我们无法调试 which 变量不正确,您要么必须自己调试,要么提供minimal reproducible example。如果问题出在fsyncops,那么@Ictus 的回答应该可以解决您的问题。

标签: python string unicode integer


【解决方案1】:

您会尝试将变量转换为预期的类型(在您的情况下为 int)。这样你就不需要弄乱你的旧代码了。

#!/usr/bin/env python3

fsyncops = "-"

try:
  fsyncops = int(fsyncops)
except:
  fsyncops = 0

print ( """%u""" % (fsyncops,) )

【讨论】:

  • @Ictus 我已经尝试过了,但它也不起作用....
  • @Ictus 我终于设法解决了,使用您的方法,非常感谢。我不必修改继承的 HTML 代码。
【解决方案2】:

% 运算符更改为format() 方法,并使用{} 占位符。这并不要求对应的参数是特定的类型,它会使用它的__str__ 操作符来格式化它。

out.append(
   """<td align="right">{} us</td><td align="right">{} us</td><td align="right">{} us</td><td align="right"><a style="cursor:default" title="average block size: {} B">{}</a></td><td align="right"><a style="cursor:default" title="average block size: {} B">{}</a></td><td align="right">{}</td>""".format(
    rtime,wtime,fsynctime,rbsize,rops,wbsize,wops,fsyncops)

或将所有%u 运算符更改为%s

【讨论】:

  • 使用.format 并不是绝对必要的。对于% 运算符,与{} 等效的格式占位符是%s
猜你喜欢
  • 2020-10-13
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
相关资源
最近更新 更多