AttributeError: объект «str» не имеет атрибута «isstr»

Я пытаюсь создать модуль python для irc-бота Дженни/Фенни.

Это часть моего кода

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. .Икс:

isinstance(your_string, basestring)

Это вопрос, который вы изначально задали, но, вероятно, не то, что вы имели в виду. Ваш пример кода предполагает, что вы действительно хотите знать, как проверить, является ли строка буквенной или буквенно-цифровой. Для этого вы хотите использовать isalpha или isalnum строковые методы.

ул.исальфа()

Возвращает true, если все символы в строке являются буквенными и есть хотя бы один символ, иначе false.

Для 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 строкой. ОП хочет проверить содержимое своей строки. - person Eric; 27.09.2012
comment
@eric Пожалуйста, не стесняйтесь редактировать вопрос, если вы чувствуете, что можете облегчить людям правильный ответ на него. Редактирование вопросов может значительно улучшить качество ответов. - person istruble; 28.09.2012
comment
Да, я знаю это. Но редактирование вопроса должно делать такие вещи, как исправление орфографии, добавление документации и уточнение вещей, которые не объясняются. Но если вы дали неверный ответ, никто другой не может его исправить. - person Eric; 28.09.2012
comment
Ответ Яна имеет смысл в том, что ввод не гарантирует возврат строки. - person Harold; 28.09.2012

Попробуйте использовать: - text[0].isalpha()..

Нет такого метода isstr() для строки..

И вместо text[1] == ('weapons' or 'food') вы должны использовать оператор in.

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