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 は %u ではなく %d 形式で出力されます。
– バルマー
2020 年 9 月 4 日 16:37
%d には数値も必要ですが、他の変数の 1 つがこのエラーの原因となっているようです。
– バルマー
2020 年 9 月 4 日 16:45
print((rtime,wtime,fsynctime,rbsize,rops,wbsize,wops,fsyncops)) は何を示しますか?
– バルマー
2020 年 9 月 4 日 16:46
2
そんなことはしないでください。私たちはあなたを助けたいと思っていますが、エラー メッセージが別のバージョンのコードを参照している場合は困難です。
– バルマー
2020 年 9 月 4 日 17:04
1
複雑な形式の文字列の場合、エラーは不正な値を示すのではなく、値の 1 つを示すだけです。表示されている行番号もr または表示された変数名は、それがまさにその変数であることを意味します。タプルのいずれかが失敗した可能性があります。どの変数が間違っているかをデバッグすることはできません。自分で行うか、最小限の再現可能な例を提供する必要があります。問題が fsyncops にある場合は、@Ictus'この答えで問題は解決するはずです。
– ミスターミヤギ
2020 年 9 月 4 日 19:43
------------------------
変数を期待される型 (今回の場合は int) にキャストしようとします。こうすることで、従来のコードをいじる必要がなくなります。
#!/usr/bin/env python3
fsyncops = "-"
try:
fsyncops = int(fsyncops)
except:
fsyncops = 0
print ( """%u""" % (fsyncops,) )
2
@Ictus これはすでに試しましたが、うまくいきません....
– デイリーズ ガルクía リバス
2020 年 9 月 4 日 19:29
@Ictus あなたのアプローチを使用して、ついに解決することができました。ありがとうございました。継承された HTML コードを変更する必要はありませんでした。
– デイリーズ・ガークía Riバス
2020 年 9 月 4 日 21:26
------------------------
% 演算子を 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 に変更します。
1
.format の使用は厳密には必要ありません。 % 演算子の {} と同等の形式プレースホルダーは %s です。.
– ミスターミヤギ
2020 年 9 月 4 日 19:03