変数や文字列を引用符で囲む場合と引用符なしの場合の使い分け方が理解できません

44 views
Skip to first unread message

masuo.o...@gmail.com

unread,
Jun 7, 2016, 2:45:52 AM6/7/16
to Robot Framework 日本語ユーザグループ
下記のようなテストデータを作成しました。Exit For Loop If  の判定条件式の部分で、変数を引用符で囲まないとエラーになります。変数や文字列を引用符で囲む場合と引用符なしの場合の使い分け方が理解できないのですが、使い分けのルールはどのように考えたらよいのでしょうか。

*** Test Cases ***
入力の繰り返し
    ${ans}=    Set Variable    CONTINUE
    :FOR    ${cnt}    IN RANGE    5
     \    ${ans}=    ポップアップ表示で問い合わせする
     \    Exit For Loop If    '${ans}' == 'BREAK'

*** keywords ***
ポップアップ表示で問い合わせする
    ${rtn}=    Get Selection From User    続けるか止めるか選択して    CONTINUE    BREAK
    Return From Keyword    ${rtn}

Yasushi Masuda

unread,
Jun 7, 2016, 11:35:26 AM6/7/16
to Robot Framework 日本語ユーザグループ
小原さん

Do Something If  的なキーワードの If の後に変数の入った評価式 ( ${FOO}>42 とか ${BAR} == ...とか)を入れた場合、次のようなことが起こります。
・変数の部分が、Robot Framework のリテラルでそのまま置き換わります。例えば、

*** variables
${FOO}    ASDF
${BAR}    123

のようにしていると、それぞれ   ASDF>42  や 123 == .... になります。

・次に、この式を、 Python の式として、Pythonの eval() で評価します。

Pythonでは、文字列リテラルはクオートで囲い、数値リテラルはクオートがなくそのままです。
クオートがなければ、文字列は何かの名前(変数)を表していることになります。
例えば 「 ASDF>42 」なんかは、そもそも ASDF という変数がないのにいきなり ASDF>42 を評価しているのでエラーになります。

その結果、例えば

${FOO} == ASDF  → ASDF == ASDF     ...ASDF(左右両辺)は定義されていないので NameError
'${FOO}' == ASDF → 'ASDF' == ASDF   ...ASDF(左辺)は定義されていないので NameError
${FOO} == 'ASDF' → ASDF == 'ASDF'    ...ASDF(右辺)は定義されていないので NameError
'${FOO}' == 'ASDF' → 'ASDF' == 'ASDF'  ...True

のようになります。

このことを念頭においておけば、ある程度区別がつくんじゃないでしょうか。


小原増雄

unread,
Jun 7, 2016, 10:42:10 PM6/7/16
to Robot Framework 日本語ユーザグループ
ありがとうございます。
じっくり読んで理解したいと思います。(^_^;)

Reply all
Reply to author
Forward
0 new messages