Python - %u 文字列で整数を返す方法は?

okwaves2024-01-25  6

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

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。