2015-04-01 5 views
0
*** Test Cases *** 
Log Test 
    Run Keyword LogType 

*** Keyword *** 
LogType 
    ${type_object}= Evaluate type(${TC_ARGS}) 
    Log To Console the type object is ${type_object} 

Когда я запустить с помощью команды, pybot -v TC_ARGS:'{"a":"b"}' a.robot , робот гравюр,строковая переменная арг рассматриваются как типы Dict в рамках робота

the type object is <type 'dict'> 

Но, не это поведение по умолчанию для лечения одного цитируемый литералы как strings? Поэтому в идеале он должен был напечатать <type 'str'> вместо <type 'dict'>.

+0

Я предполагаю, что интерпретатор python может анализировать аргументы и выводить их типы? – Ashalynd

+1

Возможно, вы правы .. когда я передал '-v TC_ARGS: 'abc'', он выдает ошибку, говоря, что' переменная abc нигде не определена' ?. Итак, я думаю, эта проблема видна, когда мы «оцениваем» строку робота? Python 'evaluation' обрабатывает строку робота как переменные. –

+0

Да, я думаю, вы правы. Попробуйте '-v TC_ARGS: '" abc "'', то это, вероятно, будет строка. – Ashalynd

ответ

3

Ваша переменная - это строка. Чтобы проверить это, просто попробуйте сделать словарь ключевых слов на нем (например, «получить из словаря» от Collections lib), и вы увидите, что он терпит неудачу

Выполнить этот код, чтобы увидеть его:.

*** Settings *** 
Library Collections 

*** Test Cases *** 
Log Test 
    # let's test a proper dictionary 
    ${dict} = create dictionary a b 
    ${value} = get from dictionary ${dict} a 
    should be equal ${value} b 
    log to console ${\n}this was a real dictionary 
    # ${TC_ARGS} is passed on command line 
    # evaluate might let us thing we have a dict 
    ${type_object} = Evaluate type(${TC_ARGS}) 
    Log To Console the type object is ${type_object} 
    # but in fact this is a string and doing a dict operation will fail 
    get from dictionary ${type_object} a 

Чтобы понять, почему вы получаете тип dict из оценки, вы должны понимать, что evaluate просто «оценивает данное выражение в Python и возвращает результаты». Поэтому он принимает свой аргумент как простую строку, запускает его с Python, как вы делали бы это на Python

Теперь, если вы проверите свой аргумент в командной строке Python, вот что вы получаете :

$ python 
Python 2.7.9 (default, Dec 19 2014, 06:00:59) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> type({"a":"b"}) 
<type 'dict'> 

Что совершенно нормально, потому что «строка» { «а»: «б»}, как вы объявляете словарь в Python.

Итак:

  • быть осторожными с «оценивать»
  • , если вам нужно передать словарь из командной строки Robot, вы будете передавать его в виде строки, а затем loads it with json Python library.
Смежные вопросы