AttributeError: วัตถุ 'str' ไม่มีแอตทริบิวต์ 'isstr'

ฉันกำลังพยายามสร้างโมดูล python สำหรับ jenni/penny irc bot

นี่เป็นส่วนหนึ่งของรหัสของฉัน

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)

หากอินพุตเป็น str อยู่แล้ว เหตุใดฉันจึงได้รับข้อผิดพลาดนี้

AttributeError: วัตถุ 'str' ไม่มีแอตทริบิวต์ 'isstr'


person user1695285    schedule 27.09.2012    source แหล่งที่มา
comment
หากเป็น str คุณจะรู้ว่าเป็น isstr คุณไม่จำเป็นต้องมีวิธีในการทำเช่นนั้น   -  person tripleee    schedule 28.09.2012


คำตอบ (3)


ข้อผิดพลาดคือสิ่งที่กล่าวไว้ str ไม่มีวิธี isstr()

หากคุณต้องการตรวจสอบให้แน่ใจว่าเป็นตัวอักษรเท่านั้น ให้ใช้ .isalpha()

ตัวอย่าง:

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

ใช้ isinstance และ basestring สำหรับ Python 2.x และ str หรือ unicode สำหรับ Python 3 .x:

isinstance(your_string, basestring)

นั่นคือคำถามที่คุณถามแต่แรกแต่อาจไม่ใช่สิ่งที่คุณหมายถึง โค้ดตัวอย่างของคุณแสดงให้เห็นว่าคุณต้องการทราบวิธีการตรวจสอบว่าสตริงเป็นตัวอักษรหรือตัวเลขและตัวอักษรหรือไม่ เพื่อที่คุณต้องการใช้ isalpha หรือ isalnum วิธีการสตริง

str.อิซัลฟา()

คืนค่าเป็นจริงหากอักขระทั้งหมดในสตริงเป็นแบบตัวอักษรและมีอักขระอย่างน้อยหนึ่งตัว หากไม่เป็นเช่นนั้นจะเป็นเท็จ

สำหรับสตริงแบบ 8 บิต วิธีการนี้จะขึ้นกับตำแหน่งที่ตั้ง

คุณอาจต้องการพิจารณาปรับโครงสร้างโค้ดของคุณใหม่เพื่อให้อ่านและบำรุงรักษาได้ง่ายขึ้นเล็กน้อย อาจเป็นเช่นนี้:

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
วิธีนี้จะตรวจสอบว่า type เป็นสตริงหรือไม่ OP ต้องการตรวจสอบ เนื้อหา ของสตริงของเขา - person Eric; 27.09.2012
comment
@eric โปรดอย่าลังเลที่จะแก้ไขคำถามหากคุณรู้สึกว่าคุณสามารถทำให้คนอื่นตอบคำถามได้อย่างถูกต้องได้ง่ายขึ้น การแก้ไขคำถามสามารถช่วยปรับปรุงคุณภาพของคำตอบได้อย่างมาก - person istruble; 28.09.2012
comment
ใช่ ฉันรู้อย่างนั้น แต่การแก้ไขคำถามควรทำสิ่งต่างๆ เช่น แก้ตัวสะกด เพิ่มเอกสารประกอบ และชี้แจงสิ่งที่ไม่ได้อธิบาย แต่ถ้าคุณให้คำตอบที่ไม่ถูกต้อง ก็ไม่ใช่หน้าที่ของคนอื่นที่จะแก้ไข - person Eric; 28.09.2012
comment
คำตอบของ Ian นั้นสมเหตุสมผลในอินพุตนั้นไม่รับประกันว่าจะส่งคืนสตริง - person Harold; 28.09.2012

ลองใช้: - text[0].isalpha()..

ไม่มีวิธีการดังกล่าว isstr() สำหรับ string..

และแทนที่ text[1] == ('weapons' or 'food') คุณควรใช้ตัวดำเนินการ in..

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