ユーザー入力による辞書から関数を実行する次のコードを記述しました。シリアル接続が含まれています。そのため、近いシリアルポートコマンドが後で関与するため、これに気をつけないでください。ユーザー入力による辞書からの関数の呼び出し - ValueErrorが私よりも頻繁に呼び出される
from commands import test1, test2, test3, finangle, Testsequence
dict = {
'test1':test1,
'test2':test2,
'test3':test3,
'finangle':finangle,
'Testsequence':Testsequence
}
この辞書は、ユーザーが入力内容を制限するために使用します。
def select_function():
while True:
try:
cmd = input("Now please type in function name. \nType in 'end' to end the program. ")
if cmd == 'end':
ser.close() # close serial connection
print("Connection to serial port " + ser.portstr + " closed.")
sys.exit()
if cmd in dict:
return dict[cmd]()
except:
raise ValueError('Invalid input!')
select_function()
は、私の知る限りでは、この全体のことは、私は「リターン」を使用すると、このコマンドは、関数の外で呼び出すことはできませんので機能でなければなりません。
私は5つの関数のうちの1つを呼び出すか、シリアル接続を閉じて残りのスクリプト(sys.exit)を終了する「終了」のどちらかを選択するようにしました。ユーザー入力が 'end'でないか、辞書内にある場合、ValueErrorと 'Invalid input!'育てられる! しかし、 'end'と 'Testsequence'または 'finangle'と入力するとValueErrorが発生します。 'test1'、 'test2'、 'test3'は正常に動作しています。私は 'Testsequence'と 'finangleが正しく定義されていることを100%確信しており、数回チェックしました。また、「終わり」を正しく書くことができると確信しています。誰か私が間違っていることを見ることができますか?
また、入力を無効にした後で2番目の選択肢を与えたいと思います。そして、彼はこれについて知っておく必要があります。しかし、私がそれを書くと、
except:
raise ValueError('Invalid input! Please try again!')
select_function()
が得られますが、エラーメッセージは表示されません!これをどうすれば解決できますか?
EDIT:解決
問題。 Pythonの基本を誤解しただけなので、気分が悪いです。ありがとうダニエルローズマン。ここでは結果のコードは次のとおりです。
ほぼ確実def select_function(): # has to be a function because of 'return'
while True:
cmd = input("Now please type in function name. \nType in 'end' to end the program. ")
if cmd == 'end':
print("Connection to serial port closed.")
sys.exit()
if cmd in dict:
return dict[cmd]()
else:
print('Invalid input! Please try again!')
select_function()
select_function()
変数 'dict'の命名は悪い考えです。システム定義クラス' dict'を陰にします。 – 9000