psych icon indicating copy to clipboard operation
psych copied to clipboard

wrong line reported in 'did not find expected key while parsing a block mapping'

Open djellemah opened this issue 11 years ago • 64 comments
trafficstars

When parsing this yaml

key_one:
  inner:
  - value1
  - value2

key_two:
    inner:
  - value1
  - value2

the error message

Psych::SyntaxError: (/tmp/oops.yaml): did not find expected key while parsing a block mapping at line 1 column 1

contains the wrong line number. It should be reporting line 7 column 5.

djellemah avatar May 19 '14 07:05 djellemah

+1, got bitten by this issue today. Very annoying when the syntax error occured nearly 1500 lines into the file!

anicholson avatar Oct 01 '14 01:10 anicholson

I guess it's winding back to the start of the structure it's trying to parse, rather than flagging the error then and there...

anicholson avatar Oct 01 '14 01:10 anicholson

Super glad I found this issue. Probably saved my an hour of hair pulling. In my case, it seems to be reporting the correct column number, but still reports line 1 incorrectly.

happycollision avatar Jan 24 '15 18:01 happycollision

To anyone stumbling through the internet that finds this issue for related reasons: Somewhere in your YAML you have extra spaces (or not enough spaces) before a key value. Thank you all for helping me solve this on a completely different project!

Edit on December 10, 2019: A great YAML linter may help here: https://jsonformatter.org/yaml-formatter.

illepic avatar Dec 07 '15 20:12 illepic

+1 on the empty space in the yml file. Copy/paste error.

DaveCollinsJr avatar Jan 26 '16 23:01 DaveCollinsJr

@illepic Thank you so much! I was missing an extra space.

felipecrv avatar Feb 01 '16 19:02 felipecrv

thanks @illepic!

rohstar avatar Mar 02 '16 16:03 rohstar

Thanks @illepic!

cleverington avatar Apr 11 '16 16:04 cleverington

Found my syntax error. Thanks! @illepic

Gimcrack avatar Apr 22 '16 21:04 Gimcrack

For anyone who is looking for this stupid error, I fix error by removing " ' " character.

BatuhanW avatar May 29 '16 12:05 BatuhanW

so it was a bad copy for me.

In vim I did a search of ^\(\s\s\)\+ to find all instances of good spacing and was able to find my bug

sanguis avatar Jun 21 '16 17:06 sanguis

+1

dangan249 avatar Jun 29 '16 22:06 dangan249

209:11 should have beed 209:09 ... cheers for pointing that out!

aurawindsurfing avatar Jul 01 '16 18:07 aurawindsurfing

Please check spacing. i got the same error because additional spacing.

ryanooi avatar Sep 13 '16 16:09 ryanooi

Hi I also got this error as "did not find expected key while parsing a block mapping at line 3 column 5" My code is as follow create_list: "Create a List" message: "Save Profiles" but when I place a message key in another key it works fine. plz tell me if any one knows solution... I have checked spacing also, as there is no extra spacing in line. Thank you...

pooja-mane avatar Sep 28 '16 12:09 pooja-mane

@pooja-mane Can you try something:

  • delete the lines where the problem seems to happens
  • check that you can launch your server after deleting (if so, you have spotted where are the 'wrong' lines)
  • rewrite them by hand
  • be careful with "'" and '"' : use " mostly if possible
  • I had this issue after bulk changing all my " to '; and then there was a "If you didn"t request" so you see my mistake was very small indeed ^^

elcortez avatar Oct 03 '16 17:10 elcortez

@elcortez thank you. I got my mistake in code. create_list: "Create a List" message: "Save Profiles" as I was using massage key as create_list.message which is wrong. as when it searches for for create_list it got a label "Create a List" it wont go to search for message key. I changed my code as create_list: message: "Save Profiles"

pooja-mane avatar Oct 04 '16 09:10 pooja-mane

Save me a lot of time. And here is a yamllint tool. http://www.yamllint.com/

einverne avatar Oct 11 '16 14:10 einverne

+1

joney000 avatar Oct 17 '16 23:10 joney000

Here's command-line yamllint. It gives the correct line number.

https://github.com/adrienverge/yamllint

mahemoff avatar Oct 21 '16 10:10 mahemoff

(WHITESPACE AS SYNTAX IS THE DUMBEST THING EVER), thank you

ORESoftware avatar Nov 28 '16 10:11 ORESoftware

@ORESoftware that's the whole point of using YAML. Use JSON instead.

felipecrv avatar Jan 05 '17 13:01 felipecrv

Here's command-line yamllint. It gives the correct line number. https://github.com/adrienverge/yamllint

Thank you @mahemoff, you just saved me a world of pain!

andydempster avatar Jan 23 '17 12:01 andydempster

Ended up here after missing a closing ' sign.

Let's assume paths: is at line 1.

The error message was: did not find expected key while parsing a block mapping at line 5 column 3 (Psych::SyntaxError)

While the actual error is at line 20.

 1. paths:
 2.   # customer:
 3.   #   path: /news/entertainment-arts-27221191
 4.   # before_capture: 'javascript/interact--casper.js' # (optional) JavaScript file to execute before taking the screenshot of this path.
 5.   customers_login:                '/account/login'
 6.   customers_register:             '/account/register'
 7.   404:                            '/wraith_testing'
 8.   article_konfigurator:           '/blogs/blog/alte-brillen-neu-verglasen'
 9.   article:                        '/blogs/blog/warum-werden-brillenglaeser-entspiegelt'
10.   article_lexikon:                        '/blogs/lexikon/basis' # blog lexikon article
11.   blog_lexikon:                   '/blogs/lexikon' # blog index
12.   blog_lexikon_tag:                   '/blogs/lexikon/tagged/b' # blog lexikon tag
13.   blog:                           '/blogs/blog'
14.   cart:                           '/cart'
15.   index:                          '/'
16.   page_about_us:                  '/pages/uber-topglas'
17.   page_composer_einstarkenglaser: '/pages/einstarkenglaser'
18.   page_composer_gleitsichtglaser: '/pages/gleitsichtglaeser'
19.   page_composer_koln:             '/pages/optiker-koeln'
20.   page_consulting:                '/pages/unsere-brillenglaser-im-detail # HERE'S THE ERROR
21.   page_contact:                   '/pages/kontakt'
22.   page_faq:                       '/pages/haeufige-fragen'
23.   page_functioniert:              '/pages/so-funktionierts'
24.   page_konfigurator:              '/pages/brillenglaeser-online-auswaehlen'
25.   page:                           '/pages/lieferzeiten'
26.   search:                         '/search'
27.   search:                         '/search?type=article,page&q=sehstarke'

vfonic avatar Mar 31 '17 04:03 vfonic

Do not write colons within strings as in:

- printf 'commit:'`

juanmirocks avatar Apr 16 '17 14:04 juanmirocks

For me the line number was incorrect when I had unescaped double quotes inside a value...

goalaleo avatar May 23 '17 10:05 goalaleo

Copy/pasting code from the internet can have WEIRD results. I had to re-write an entire file to fix this issue; my spaces and quotes were right, but there were invisible whitespace characters hidden... somewhere.

farfromunique avatar Jun 13 '17 23:06 farfromunique

This vagrant error reporting must be looked into! For me reported line number was 74, while it was 84 actually. For beginners like me its a nightmare to understand what's went wrong! It was no copy/paste for me... I forgot to enable the key called plugins while I have user-switching added under it! :) Glad that I could find it out quickly.

emfluenceindia avatar Jul 13 '17 13:07 emfluenceindia

  1. parsing begins
  2. parser constructor
  3. Handler Abstract Class
  4. Document Stream Handler
    • Does not handleHandler#event_location.
  5. But it's parent TreeBuilder does.
  6. Treebuilder#set_location
    • sets the location for an event.
  7. TreeBuilder#set_start_location and TreeBuilder#set_end_location
    • sets the line number where an event starts and ends, but those events are based on the node passed in. What gets passed in when an error is encountered?
    • Looks like the node type is important if we remember the error message:

      did not find expected key while parsing a block mapping at line 2 column 1 (Psych::SyntaxError)

  8. Is it an issue with Node::Mapping? Probably not.
    • there are no calls to instantiate at a Mapping in the TreeBuilder.
  9. Is it an issue with Node::Stream? More likely . . .
    • Streams are made up of child nodes, but its difficult to tell how exactly.

Freyert avatar Dec 07 '17 14:12 Freyert

It seems like this is manifesting itself in a variety of ways:

  1. colon within string
  2. unescaped double quotes within a value
  3. not closing your strings
  4. In general, bad whitespace.

Freyert avatar Dec 07 '17 15:12 Freyert