2014-06-28 14 views
32

Tôi mới ở Python và tôi đang cố gắng tạo bảng băm để kiểm tra xem một khóa có trỏ đến giá trị trong bảng hay không, và nếu không, hãy khởi tạo nó một mảng trống. Phần vi phạm của mã của tôi là dòng:TypeError: get() không có đối số từ khóa

converted_comments[submission.id] = converted_comments.get(submission.id, default=0) 

tôi nhận được lỗi:

TypeError: get() takes no keyword arguments 

Nhưng trong tài liệu (và các phần khác nhau của mã ví dụ), tôi có thể thấy rằng nó không phải mất một đối số mặc định:

https://docs.python.org/2/library/stdtypes.html#dict.get http://www.tutorialspoint.com/python/dictionary_get.htm

Following is the syntax for get() method:

dict.get(key, default=None)

Không có gì về điều này trên The Stack, vì vậy tôi cho rằng đó là một lỗi mới bắt đầu?

+2

Ví dụ trong liên kết thứ hai là vui nhộn. – ziyuang

Trả lời

17

Các thông báo lỗi nói rằng get không có đối số từ khóa nhưng bạn đang cung cấp một với default=0

converted_comments[submission.id] = converted_comments.get(submission.id, 0) 
+0

Tôi chỉ nhận ra sẽ thấy điều này nếu tôi cuộn xuống. Rất tiếc! Cảm ơn! – itsmichaelwang

+4

Tôi thích câu trả lời khác bởi vì bạn không giải quyết thực tế rằng đây là một hạn chế đáng ngạc nhiên, như thường các hàm python cho phép các đối số từ khóa. Câu trả lời khác giải quyết vấn đề này. –

62

Do cách Python API C cấp phát triển, rất nhiều built-in chức năng và phương pháp don 't thực sự có tên cho các đối số của họ. Ngay cả khi tài liệu gọi đối số default, hàm không nhận ra tên default như tham chiếu đến đối số thứ hai tùy chọn. Bạn phải cung cấp đối số theo địa lý:

>>> d = {1: 2} 
>>> d.get(0, default=0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: get() takes no keyword arguments 
>>> d.get(0, 0) 
0 
+19

Bạn gợi ý, nhưng không nói rõ ràng: các hàm python thường cho phép các đối số được đặt tên tùy ý. API cấp C là một ngoại lệ đối với quy tắc. – idbrii

+0

Cảm ơn, mặc dù nó khó chịu hơn nếu tôi muốn gỡ lỗi mã hiện tại – Dejell

+1

Wow Tôi đã sử dụng python trong 7 năm và tôi không bao giờ biết có các chức năng không lấy đối số từ khóa. Điều đó thật kỳ lạ, chắc chắn người phiên dịch có thể duy trì một từ điển các hàm dựng sẵn và tên đối số của chúng, để nó có thể chấp nhận các đối số từ khóa với chi phí thời gian chạy gần bằng không? (Chi phí duy nhất sẽ là trong quá trình tạo bytecode, và nó sẽ rất nhỏ.) – max

Các vấn đề liên quan