问题
I know this question has been asked here but the solution does not work for me. I am using python 3.4
.
I have the following formatting in my script :
print ( "\t {0:20} {1:<11} {2:<25} {3:11} {4:11} {5:>32}".format( files.name.split('/')[-1], sizeof_fmt(files.size),
str( formatted_timestamp ), files.owner,
files.version_id, files.etag ))
This works in python 2.7.x
. But in 3.4
I get the error:
File "test.py", line 3, in file_print
versionid, etag ))
TypeError: non-empty format string passed to object.__format__
I tried this:
print ( "\t {0:20} {1:<11} {2:<25} {3:11} {!s4:11s} {!s5:>32s}".format( files.name.split('/')[-1], sizeof_fmt(files.size),
str( formatted_timestamp ), files.owner,
files.version_id, files.etag ))
But I still get the same error. I even converted the versionid
and etag
to strings and end up getting the same error. Can someone explain this to me?
Etag look like this 9893532233caff98cd083a116b013c0b
, versionid is None
回答1:
One of your parameters is a type that doesn't have their own __format__()
method, so object.__format__()
is used instead.
object.__format__()
doesn't support any formatting options, including field widths and alignment, which is why you get the error.
Conversion to string first should help, but you do need to put your conversion after the field name; instead of {!s4:11s}
use {4!s:11s}
, etc:
print ( "\t {0:20} {1:<11} {2:<25} {3:11} {4!s:11s} {5!s:>32s}".format(
files.name.split('/')[-1], sizeof_fmt(files.size),
str(formatted_timestamp), files.owner,
files.version_id, files.etag))
来源:https://stackoverflow.com/questions/29613676/python-typeerror-non-empty-format-string-passed-to-object-format