0

jenni /phennyircボット用の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

isinstanceを使用し、Python2.xまたはPython3.xのいずれかbasestringを使用します。strunicode

isinstance(your_string, basestring)

それはあなたが最初に尋ねた質問ですが、おそらくあなたが意図したものではありません。サンプルコードは、文字列がアルファベットか英数字かを確認する方法を本当に知りたいことを示唆しています。そのためには、isalphaまたはisalnum文字列メソッドを使用します。

str.isalpha()

文字列内のすべての文字がアルファベットで、少なくとも1文字ある場合は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')を使用する必要があります。in

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