2016-10-15 9 views
2

これはたくさん見ることができますが、私はまだ一般的なコーディングにはまだ新しくて学ぶことがたくさんあることを警告したいと思っています。私は時間があるときはいつでも個人的なプロジェクトとYouTubeで作業して自分自身を教えようとしています。re.split()エラーの説明?

ロングバージョン:分割機能を使用するとエラーが表示されますが、それでも値は取得されます。本質的に私の機能は、°分単位の角度または方位を取ることです。たとえば、 "N 38°43'23" E "を10進数にします。私は角度を変換する文字列内の数字を見つけるためにインデックスを使用するために、90度未満のベアリングを利用しました。しかし、角度がベアリングでない場合は、度数を何十位に引いたのかを把握する方法は考えられませんでしたので、度の記号で分けてみました。しかし、これを行うと、split()が空でないパターンマッチを必要とするというエラーが返されます。これは何を意味するのでしょうか?コードは引き続き動作しますが、常にこのエラーが返されます。

ショートバージョン:ここに私のコードです:

def decimal(x): # converts degrees-minutes-seconds to decimal 
    dms = list(x) 
    if dms[0] == 'N' or dms[0] == 'S': 
     degrees = ((int(dms[2]) * 10) + int(dms[3])) 
     minutes = ((int(dms[-8]) * 10) + int(dms[-7]))/60 
     seconds = ((int(dms[-5]) * 10) + int(dms[-4]))/3600 
    else: 
     placeholder = re.split(r'\u00b0*', x) 
     degrees = int(placeholder[0]) 
     minutes = ((int(dms[-6]) * 10) + int(dms[-5]))/60 
     seconds = ((int(dms[-3]) * 10) + int(dms[-2]))/3600 
    return degrees + minutes + seconds  

私はそれを実行すると、私は小数点数を取得するが、私はまた、取得:

FutureWarning: split() requires a non-empty pattern match. 
    return _compile(pattern, flags).split(string, maxsplit) 

私が投稿他の質問を見てきましたこのエラーは発生しませんでしたが、これを避けるために何をすべきか、あるいは実際にエラーが何を意味するのか説明した回答はありませんでした。何か助けてくれてありがとう。また、あなたが見るアドバイスや訂正も大変ありがとう!

答えて

2

あなたが持っているものはエラーではありません。警告です。

生の文字列を使用しないでください。'\u00b0'、文字が必要です。 'c*'cの0以上と一致するので、空の文字列と一致します。私はこれが警告であると信じています。私はあなたが正規表現を使用しているので、あなたは、単一の正規表現で文字列全体を解析し、グループ化の利点を取ることができるだけで

x.split('\u00b0') 
+0

このアドバイスをいただき、ありがとうございます! – quesadyllan

+0

@quesadyllanフィードバックをいただきありがとうございます:) –

1

、あなたが

re.split('\u00b0', x) 

またはより良いを使用することを示唆している:

import re 

def decimal_alt(x): 
    REGEX = re.compile(u"([NS])\\s(\\d+)\u00B0(\\d+)\'(\\d+)\"") 
    rm = REGEX.match(x) 
    if rm is not None: 
    sign = -1 if rm.group(1) == 'S' else +1 
    d = float(rm.group(2)) 
    m = float(rm.group(3))/60.0 
    s = float(rm.group(4))/3600.0 
    return sign * (d + m + s) 

print decimal_alt(u"N 38\u00B040'20\"") 
で使用

それが印刷されます

38.6722222222 
+1

私は一般的に正規表現を使用することに反対していますが、OPの特定の分割オン度問題は正規表現を必要としませんが、このようにして、すべての解析を1回の呼び出しで行うことができます。パターンにいくつかのオプションの間隔を置くと、より堅牢になります。 –

+0

それははるかに効率的に見えます。私はまだ正規表現について学んでいるので、これを見て、理にかなっているまでそれを試してみましょう。 – quesadyllan