Lỗi phân tích cú pháp tệp yaml: các giá trị ánh xạ không được phép ở đây


90

Tôi muốn tải một ứng dụng lên Google App Engine:

Tôi hiểu rồi

Error parsing yaml file:
mapping values are not allowed here
  in "/home/antonio/Desktop/ATI/climate-change/app.yaml", line 2, column 8 

Khi chạy

./appcfg.py update /home/antonio/Desktop/ATI/climate-change

với tệp app.yaml này:

application:climate-change
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: helloworld.app

dòng 2, cột 8 tương ứng với dòng phiên bản. Có gì sai ở đây? Btw, tôi đang sử dụng Ubuntu 12.04 ở đây.


Đảm bảo rằng bạn không sao chép văn bản từ Skype hoặc một số phần mềm. Trước tiên, hãy dán văn bản vào trình soạn thảo văn bản, sau đó sao chép từ đó. Tôi đã sao chép từ Skype và rõ ràng không có vấn đề gì. Tôi đã giải quyết nó bằng cách chỉ cần xóa và sau đó nhập lại 'dấu cách' để tạo không gian hợp lệ (Unix).
Nadjib Mami

Câu trả lời:



63

Một nguyên nhân khác là thụt lề sai, nghĩa là cố tạo sai đối tượng. Tôi vừa sửa một cái trong định nghĩa Kubernetes Ingress:

Sai lầm

- path: / 
    backend: 
      serviceName: <service_name> 
      servicePort: <port> 

Chính xác

- path: /
  backend:
    serviceName: <service_name>
    servicePort: <port>

4
Đúng, đây cũng là vấn đề của tôi. Đây là lý do tại sao python lại ngu ngốc. Khoảng trắng KHÔNG nên quan trọng.
Kenny Wyland

Không biết đây là một tệp python. Tôi đã có thêm MỘT không gian. Khùng. Cảm ơn bạn đã trả lời!
Vern Jensen

4
Nó KHÔNG PHẢI là một tệp Python. YAML và Python giống nhau ở chỗ cả hai đều sử dụng "khoảng trắng chịu tải" để giảm số lượng dấu câu mà bạn cần.
shacker

1
@shacker Tôi muốn có dấu chấm câu.
bot_bot

Vâng. Nhưng bằng cách nào đó, thụt lề trong python không bao giờ gây ra cho tôi nhiều vấn đề như trong YAML. Đối tượng trong một khoảng cách mục danh sách luôn giúp tôi. YAML thực sự là một định dạng khủng khiếp. Tại sao chúng ta không thể chỉ có JSON với nhận xét và dấu phẩy ở cuối. Sẽ dễ dàng hơn rất nhiều.
Gellweiler

5

Hoặc, nếu khoảng cách không phải là vấn đề, nó có thể muốn tên thư mục mẹ hơn là tên tệp.

Không $ dev_appserver helloapp.py
nhưng$ dev_appserver hello/

Ví dụ:

Johns-Mac:hello john$ dev_appserver.py helloworld.py
Traceback (most recent call last):
  File "/usr/local/bin/dev_appserver.py", line 82, in <module>
    _run_file(__file__, globals())
...
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/yaml_listener.py", line 212, in _GenerateEventParameters
    raise yaml_errors.EventListenerYAMLError(e)
google.appengine.api.yaml_errors.EventListenerYAMLError: mapping values are not allowed here
  in "helloworld.py", line 3, column 39

Đấu với

Johns-Mac:hello john$ cd ..
Johns-Mac:fbm john$ dev_appserver.py hello/
INFO     2014-09-15 11:44:27,828 api_server.py:171] Starting API server at: http://localhost:61049
INFO     2014-09-15 11:44:27,831 dispatcher.py:183] Starting module "default" running at: http://localhost:8080

2

Có thể điều này sẽ giúp ích cho người khác, nhưng tôi đã gặp lỗi này khi RHS của ánh xạ chứa dấu hai chấm mà không kèm theo dấu ngoặc kép, chẳng hạn như:

someKey: một chìa khóa khác: Thay đổi để tạo nên ngày hôm nay: làm việc nhiều hơn

nên là

someKey: một khóa khác: "Thay đổi để tạo ra ngày hôm nay: tập luyện nhiều hơn"


2

Tôi đã gặp lỗi này trong một tình huống tương tự như được đề cập trong câu trả lời của Joe:

description: Too high 5xx responses rate: {{ .Value }} > 0.05

Chúng tôi có một dấu hai chấm trong giá trị mô tả. Vì vậy, vấn đề là thiếu dấu ngoặc kép xung quanh giá trị mô tả. Nó có thể được giải quyết bằng cách thêm dấu ngoặc kép:

description: 'Too high 5xx responses rate: {{ .Value }} > 0.05'

1

Sai:

people:
  empId: 123
  empName: John
    empDept: IT

Chính xác:

people:
  emp:
    id: 123
    name: John
    dept: IT

0

Vấn đề của tôi là thiếu tập hợp các dấu ngoặc kép;

Foo: bar 'baz'

nên là

Foo: "bar 'baz'"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.