AttributeError: objek 'str' tidak memiliki atribut 'isstr'

Saya mencoba membuat modul python untuk bot jeni/phenny irc.

Ini adalah bagian dari kode saya

def bp(jenni, input):
    try: 
        text = input.group(2).encode('utf-8').split()
    except: 
        jenni.reply("Please use correct syntax '.bp id weapons 7'. Available for weapons and food only")
    if text[0].isstr() and text[1].isstr() and text[2].isdigit() and len(text) == 3 and text[1] == ('weapons' or 'food'):
        url = 'http://someAPIurl/%s/%s/%s/1.xml?key=%s' % (text[0], text[1], text[2], key)

Jika inputnya sudah str mengapa saya mendapatkan kesalahan ini?

AttributeError: objek 'str' tidak memiliki atribut 'isstr'


person user1695285    schedule 27.09.2012    source sumber
comment
Jika itu str maka Anda tahu itu isstr, Anda tidak memerlukan metode untuk itu.   -  person tripleee    schedule 28.09.2012


Jawaban (3)


Kesalahannya persis seperti yang tertulis; str tidak memiliki metode isstr().

Jika Anda ingin memastikan bahwa itu hanya huruf, gunakan .isalpha().

Contoh:

>>> '0'.isalpha()
False
>>> 'a'.isalpha()
True
>>> 'aa'.isalpha()
True
person Eric    schedule 27.09.2012

Gunakan isinstance dan basestring untuk Python 2.x dan str atau unicode untuk Python 3 .X:

isinstance(your_string, basestring)

Itu adalah pertanyaan yang awalnya Anda tanyakan tetapi mungkin bukan itu yang Anda maksud. Kode sampel Anda menunjukkan bahwa Anda benar-benar ingin mengetahui cara memeriksa apakah suatu string berbentuk alfabet atau alfanumerik. Untuk itu Anda ingin menggunakan isalpha atau isalnum metode string.

str.isalpha()

Mengembalikan nilai benar jika semua karakter dalam string berbentuk alfabet dan setidaknya terdapat satu karakter, salah jika sebaliknya.

Untuk string 8-bit, metode ini bergantung pada lokal.

Anda mungkin juga ingin mempertimbangkan untuk memfaktorkan ulang kode Anda agar lebih mudah dibaca dan dipelihara. Mungkin sesuatu seperti ini:

API_URL = 'http://someAPIurl/%s/%s/%s/1.xml?key=%s'
KIND_CHOICES = ('weapon', 'food')

def bp(jenni, input):
    try:
        cmd, kind, index = input.group(2).encode('utf-8').split()
        # Assigning to 3 variables lets you skip the len() == 3 check
        # and can make the use of each argument more obvious than text[1]
    except:
        jenni.reply("Please use correct syntax '.bp id weapons 7'. Available for weapons and food only")
    if cmd.isalpha() and kind in KIND_CHOICES and index.isdigit():
        url = API_URL % (cmd, kind, index, key)  # is key a global?
    # ...
person istruble    schedule 27.09.2012
comment
Ini hanya akan memeriksa apakah type adalah string. OP ingin memeriksa isi stringnya. - person Eric; 27.09.2012
comment
@eric Silakan mengedit pertanyaan jika Anda merasa dapat memudahkan orang menjawabnya dengan benar. Mengedit pertanyaan dapat sangat membantu meningkatkan kualitas jawaban. - person istruble; 28.09.2012
comment
Ya aku tau itu. Namun mengedit pertanyaan harus melakukan hal-hal seperti memperbaiki ejaan, menambahkan dokumentasi, dan mengklarifikasi hal-hal yang tidak dijelaskan. Namun jika Anda memberikan jawaban yang salah, orang lain tidak berhak memperbaikinya. - person Eric; 28.09.2012
comment
Jawaban Ian masuk akal karena input tidak dijamin menghasilkan string. - person Harold; 28.09.2012

Coba gunakan: - text[0].isalpha()..

Tidak ada metode seperti itu isstr() untuk string..

Dan sebagai pengganti text[1] == ('weapons' or 'food'), Anda harus menggunakan operator in..

if (text[1] in ('weapons', 'food')) {
}
person Rohit Jain    schedule 27.09.2012