KMarto
KMarto

Reputation: 300

Python not all arguments converted during string formatting

I have the following python code

table += '<tr><td>{0}</td><td>{1}</td></tr>'% format(str(key)), 
format(str(value))
TypeError: not all arguments converted during string formatting

What could be the problem?

Upvotes: 0

Views: 100

Answers (2)

Martijn Pieters
Martijn Pieters

Reputation: 1122232

You are mixing three different methods of converting values to strings. To use the {..} placeholders, use the str.format() method, directly on the string literal that is the template:

table += '<tr><td>{0}</td><td>{1}</td></tr>'.format(key, value)

There's no need to use the str() or format() functions, and you don't need to use % either.

  • The format() function turns objects into a string using the format specification mini language, the same language that lets you format the values in a str.format() placeholder. It's the formatting part of the template language, available as a stand-alone function.

  • str() turns an object into a string without specific formatting. You'll always get the same result. Because str.format() already converts objects to strings (but with formatting controls) you don't need to use this. And if you need it anyway (because, say, you want to apply string formatting controls and not those of another object type), str.format() has the !s conversion option.

  • Applying % to a string object gives you a different string formatting operation called *printf-style formatting. This method is much less flexible than the str.format() version.

If your are using Python 3.6 or newer I recommend you use the faster f-string formatting string literals:

table += f'<tr><td>{key}</td><td>{value}</td></tr>'

Upvotes: 3

Tudor Plugaru
Tudor Plugaru

Reputation: 397

You have to call the .format method on the string. Just like this:

table += '<tr><td>{key}</td><td>{value}</td></tr>'.format(key=str(key), value=str(value))

Upvotes: 1

Related Questions