psych
psych copied to clipboard
wrong line reported in 'did not find expected key while parsing a block mapping'
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.
+1, got bitten by this issue today. Very annoying when the syntax error occured nearly 1500 lines into the file!
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...
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.
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.
+1 on the empty space in the yml file. Copy/paste error.
@illepic Thank you so much! I was missing an extra space.
thanks @illepic!
Thanks @illepic!
Found my syntax error. Thanks! @illepic
For anyone who is looking for this stupid error, I fix error by removing " ' " character.
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
+1
209:11 should have beed 209:09 ... cheers for pointing that out!
Please check spacing. i got the same error because additional spacing.
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 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 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"
Save me a lot of time. And here is a yamllint tool. http://www.yamllint.com/
+1
Here's command-line yamllint. It gives the correct line number.
https://github.com/adrienverge/yamllint
(WHITESPACE AS SYNTAX IS THE DUMBEST THING EVER), thank you
@ORESoftware that's the whole point of using YAML. Use JSON instead.
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!
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'
Do not write colons within strings as in:
- printf 'commit:'`
For me the line number was incorrect when I had unescaped double quotes inside a value...
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.
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.
- parsing begins
- parser constructor
- Handler Abstract Class
- Handles events on the parse stream.
Handler#event_location: my money's on this guy.
- Document Stream Handler
- Does not handle
Handler#event_location.
- Does not handle
- But it's parent TreeBuilder does.
Treebuilder#set_location- sets the location for an event.
TreeBuilder#set_start_locationandTreeBuilder#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)
- Is it an issue with
Node::Mapping? Probably not.- there are no calls to instantiate at a
Mappingin theTreeBuilder.
- there are no calls to instantiate at a
- Is it an issue with
Node::Stream? More likely . . .- Streams are made up of child nodes, but its difficult to tell how exactly.
It seems like this is manifesting itself in a variety of ways:
- colon within string
- unescaped double quotes within a value
- not closing your strings
- In general, bad whitespace.