2017-07-19 10 views
0

私はPythonの削除版、マイクロパイソンで書いています。
私はいくつかの画像処理を行い、 "find_line_segments"(それはCanny EdgeとHough Lines変換を行います)というメソッドから返された最長のラインを見つけることを試みています。
BUT!私は間違いを続ける。
コードPython:例外をキャッチできないエラーチェック

rl = max(img.find_line_segments(roi = r_r, threshold = 1000, theta_margin = 15, rho_margin = 15, segment_threshold = 100), key = lambda x: x.length()) 
    if rl is not None: 
     if rl[6] > 0 : 
      img.draw_line(rl.line(), color = 155) 
      print("RL") 
      print(rl) 

エラー:

Traceback (most recent call last): 
File "<stdin>", line 77, in <module> 
ValueError: arg is an empty sequence 
MicroPython d23b594 on 2017-07-05; OPENMV3 with STM32F765 
Type "help()" for more information. 

ラインif rl is not None:にエラー指していること...それはエラーの原因となっている理由を私は理解していません。 max()関数が値を返さない場合(行が見つからない場合)、if文は決して実行されません。
私は何を理解していませんか?

編集:
誤って一部のコードを削除しました。

+0

コードを正しくフォーマットしておけば、簡単に手助けすることができます。 – rayrase

+0

私のコードに何が問題なのですか? –

+0

'None!= []'。 'rl:'がうまくいっていないので動作するかもしれませんが、あなたの質問を理解するのは難しいので推測です。また、(あなたの質問のタイトルが示唆している)例外をキャッチしようとは思わないが、例外的な状況を回避しようとする。 – roganjosh

答えて

1

max(img.find_line_segments(...)...)ステートメントを2つのステートメントに分けて、関数を使用する前にfind_line_segmentsの結果が何かをテストしてみてください。 max関数が例外をスロー何であるように聞こえる:

# Dummy function 
def find_line_segments(): 
    return [] 

max_segment = max(find_line_segments()) 

は空のシーケンスにmax()を使用しようとしているため、この例外を与える:

Traceback (most recent call last): 
    File "C:\Users\ayb\Desktop\t (3).py", line 8, in <module> 
    max_segment = max(get_line_segments()) 
ValueError: max() arg is an empty sequence 

は例外を避けるために、代わりにこのような何かを行います。

segments = find_line_segments() 
if segments: 
    max_segment = max(segments) 
+0

if文が問題を回避したようです。なぜmax()ステートメントにその問題があるのか​​よく分かりません。私はそれをさらに探求しなければなりません(find_line_segments()関数*は行を見つけることができます...それは "max()"に何もない –

関連する問題