Jadi, saya punya masalah ini. Saya mendapat tuple (1,2,3) yang harus saya cetak dengan format string. misalnya.
tup = (1,2,3)
print "this is a tuple %something" % (tup)
dan ini harus mencetak representasi tuple dengan tanda kurung, seperti
Ini adalah tuple (1,2,3)
Tapi saya TypeError: not all arguments converted during string formatting
malah mendapatkannya .
Bagaimana saya bisa melakukan ini? Agak hilang di sini jadi jika kalian bisa mengarahkan saya ke arah yang benar :)
print(....)
.Perhatikan bahwa
%
sintaks sudah usang. Gunakanstr.format
, yang lebih sederhana dan lebih mudah dibaca:sumber
%
itu usang tetapi saya sekarang selalu Andastr.format
tetap membabi buta. Namun demikian, saya tertarik pada apa yang dimaksud kualifikasi penuh, karena sederhana{0}
bukan kualifikasi penuh, tetapi hanya indikator posisi. Untukint
, apa yang saya sebut kualifikasi penuh akan{0:d}
(atau{3:d}
misalnya, jika int yang akan dicetak terjadi pada posisi ke-4 dalamstr.format
metode). Saya sudah mencoba mencetak tuple menggunakan{0:s}
kualifikasi tetapi tidak berhasil. Jadi, apa kualifikasi penuh untuk sesuatu seperti tuple?str
Anda dapat mengatakan{!s}
, tetapi ini adalah default, jadi itu tidak perlu. Jika Anda ingin menggunakannyarepr
, Anda bisa melakukannya{!r}
. Berbeda dengan dengan%
, tidak perlu mengatakand
untuk bilangan bulat.%
itu tidak sepenuhnya usang. Bahkan,pylint
bahkan akan mengeluh jika Anda menggunakan.format
sintaks dalamlogging
modul: stackoverflow.com/a/34634301/534238Banyak jawaban yang diberikan di atas benar. Cara yang tepat untuk melakukannya adalah:
Namun, ada perselisihan tentang apakah
'%'
operator String sudah usang. Seperti yang telah ditunjukkan banyak orang, sudah pasti tidak usang, karena'%'
operator String lebih mudah untuk menggabungkan pernyataan String dengan daftar data.Contoh:
Namun, menggunakan
.format()
fungsi ini, Anda akan berakhir dengan pernyataan verbose.Contoh:
Lebih lanjut,
'%'
Operator string yang juga berguna bagi kita untuk memvalidasi tipe data seperti%s
,%d
,%i
, sementara .format () hanya mendukung dua bendera konversi :'!s'
dan'!r'
.sumber
.format
:tup = (1,2,3); print('First: {}, Second: {}, Third: {}'.format(*tup))
.Perhatikan bahwa itu
(tup,)
adalah tuple yang berisi tuple. Tupel luar adalah argumen ke operator%. Tuple dalam adalah isinya, yang sebenarnya dicetak.(tup)
adalah ekspresi dalam tanda kurung, yang ketika dievaluasi menghasilkantup
.(tup,)
dengan trailing koma adalah sebuah tuple, yang hanya berisitup
anggota saja.sumber
Ini tidak menggunakan pemformatan string, tetapi Anda harus dapat melakukannya:
Jika Anda benar-benar ingin menggunakan pemformatan string:
Catatan, ini mengasumsikan Anda menggunakan versi Python lebih awal dari 3.0.
sumber
sumber
Meskipun pertanyaan ini sudah cukup lama dan memiliki banyak jawaban berbeda, saya masih ingin menambahkan imho yang paling "pythonic" dan juga jawaban yang mudah dibaca / ringkas.
Karena
tuple
metode pencetakan umum sudah ditunjukkan dengan benar oleh Antimony, ini merupakan tambahan untuk mencetak setiap elemen dalam tuple secara terpisah, karena Fong Kah Chun telah menunjukkan dengan benar dengan%s
sintaks.Menariknya itu hanya disebutkan dalam komentar, tetapi menggunakan operator tanda bintang untuk membongkar tuple menghasilkan fleksibilitas dan keterbacaan penuh menggunakan
str.format
metode ketika mencetak elemen tuple secara terpisah .Ini juga menghindari pencetakan koma jejak saat mencetak tupel elemen tunggal, seperti dielakkan oleh Jacob CUI dengan
replace
. (Meskipun saya mewakili representasi koma trailing sudah benar jika ingin mempertahankan representasi tipe saat mencetak ):sumber
Saya pikir cara terbaik untuk melakukan ini adalah:
Jika Anda terbiasa dengan printf format gaya , maka Python mendukung versinya sendiri. Dalam Python, ini dilakukan dengan menggunakan operator "%" yang diterapkan pada string (kelebihan dari operator modulo), yang mengambil string apa pun dan menerapkan format gaya printf padanya.
Dalam kasus kami, kami mengatakannya untuk mencetak "Ini adalah tuple:", dan kemudian menambahkan string "% s", dan untuk string aktual, kami meneruskan representasi string dari tuple (dengan memanggil str ( t)).
Jika Anda tidak terbiasa dengan format gaya printf, saya sangat menyarankan belajar, karena sangat standar. Sebagian besar bahasa mendukungnya dengan satu atau lain cara.
sumber
Harap perhatikan tanda koma akan ditambahkan jika tuple hanya memiliki satu item. misalnya:
dan Anda akan mendapatkan:
dalam beberapa kasus misalnya Anda ingin mendapatkan daftar kutipan untuk digunakan dalam string kueri mysql seperti
Anda perlu mempertimbangkan untuk menghapus koma tailing, gunakan replace (',)', ')') setelah memformat karena mungkin tuple hanya memiliki 1 item seperti ('Tom',), sehingga koma tailing perlu dihapus:
Harap sarankan jika Anda memiliki cara yang layak untuk menghapus koma ini di output.
sumber
format()
kueri basis data. Ada metode yang berlaku untuk ini di setiap perpustakaan.format()
dengan nilai yang dikumpulkan dari pengguna dapat dihasilkan dengan injeksi SQL. Lebih aman memvalidasi nilai input sebelum memasukkannya ke dalam kueri. Lihat panduan ini untuk info lebih lanjut: dev.mysql.com/doc/connector-python/en/… Anda juga dapat memberikan nilai parameter ke representasi string tipe database dan kemudian menempelkannya ke string kueri. Lihatlah initd.org/psycopg/docs/usage.html di mana Anda memiliki sampel tandingan dengan%
operator dan solusi denganexecute()
metode tempat parameter kueri diteruskan dalam argumen metode.Selain metode yang diusulkan dalam jawaban lain, karena Python 3.6 Anda juga dapat menggunakan Interpolasi String Literal (f-string):
sumber
Coba ini untuk mendapatkan jawaban:
Jika kita hanya memasukkan satu tuple di dalam (), itu akan membuat tuple sendiri:
Ini berarti pernyataan cetak di atas akan terlihat seperti: print ("Nilai:% s"% ('1', '2')) yang merupakan kesalahan!
Karenanya:
Di atas akan dimasukkan dengan benar ke argumen cetak.
sumber
Untuk python 3
sumber
Anda dapat mencoba yang ini juga;
Anda tidak dapat menggunakan
%something
dengan(tup)
hanya karena konsep pengemasan dan membongkar dengan tuple.sumber
Bicara itu murah, tunjukkan kode:
sumber