0

我正在尝试为 jenni/phenny irc bot 制作 python 模块。

这是我的代码的一部分

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”

4

3 回答 3

3

错误正是它所说的;str没有办法isstr()

如果您想确保它只是字母,请使用.isalpha().

例子:

>>> '0'.isalpha()
False
>>> 'a'.isalpha()
True
>>> 'aa'.isalpha()
True
于 2012-09-27T18:41:28.690 回答
3

对 Python 2.x或Python 3.x使用isinstance和:basestringstrunicode

isinstance(your_string, basestring)

这是您最初提出的问题,但可能不是您的意思。您的示例代码表明您真的想知道如何检查字符串是字母还是字母数字。为此,您要使用isalphaorisalnum字符串方法。

str.isalpha()

如果字符串中的所有字符都是字母并且至少有一个字符,则返回 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?
    # ...
于 2012-09-27T18:47:40.293 回答
0

尝试使用: - text[0].isalpha()..

字符串没有这样的方法isstr()..

而代替text[1] == ('weapons' or 'food'),您应该使用inoperator..

if (text[1] in ('weapons', 'food')) {
}
于 2012-09-27T18:39:48.097 回答