1

ファイルから情報を読み取り(行はポイント、ポリゴン、ライン、サークルを記述)、それを解析してクラスに応じたコードを持っています。Point には x 座標と 7 座標があり、Line には始点と終点があります。

リスト ( line = ['L1','L((1,1), (1,2))','# comment']) があり、それを行にしようとしています。問題はエンドポイントの作成にあります。実行するとValueError: invalid literal for int() with base 10: ''、変数から次のエラーが発生しますx2

何が問題ですか?

コード:

def make_line(line):
        name = line[0]
        point = line[1].split(", ")
        p = point[0].split(",")
        x1 = int(p[0][3:])
        y1 = int(p[1][:-1])
        point1 = Point(x1,y1)
        p = point[1].split(",")
        x2 = int(p[0][1:])
        y2 = int(p[1][:-2])
        point2 = Point(x2,y2)
        line = Line(point1,point2)
        shapes[name] = line
4

3 に答える 3

6

空の文字列を int に変換しようとしているというエラー メッセージが表示されます。これを確認するために、変換を行う直前にすべてのデータを再確認してください。

データが正しければ、整数へのキャストが機能することは絶対確実です。したがって、導き出される唯一の結論は、データが正しくないということです。質問に対するコメントで、データは良好であると主張していますが、それは単に真実ではありません。

自分の仮定よりも Python インタープリターを信頼してください。

于 2013-05-19T16:55:29.680 に答える
0

エラーは、コードに何か問題があることを示していますが、実際には正しく実行されます。エラーが発生した場合は、エラーが発生した行を見つけて、 を使用printして値を出力し、正しい値を正しいメソッドに確実に渡していることを確認する価値があります。

この(一見)おかしなフォーマットに対処する簡単な方法は、python のeval()関数を使用することです。リストの 2 番目の部分は 2 つのセットのセットのように見えますが、実際はそうです。

これを行うと、素敵な set オブジェクトが得られます。

eval("((1,1), (1,2))")
# equivalent to this:
eval(line[1][1:],{}) # passing an empty dict as the 2nd argument makes eval a (bit) safer

しかし、これは簡単で汚れた方法であり、本番コードでは決して使用しないでください。

于 2013-05-19T16:59:40.060 に答える
0

十分な情報を提供していない部分を削除しましたが、まだ同じエラーが発生しません。

def make_line(line):
    name = line[0]
    point = line[1].split(", ")
    p = point[0].split(",")
    x1 = int(p[0][3:])
    y1 = int(p[1][:-1])
    p = point[1].split(",")
    x2 = int(p[0][1:])
    y2 = int(p[1][:-2])
    return x1, y1, x2, y2

>>> make_line(['L1','L((1,2), (1,1))','# comment'])
(1, 2, 1, 1)
于 2013-05-19T16:59:42.503 に答える