2014-04-29 20 views
12

Vì vậy, tôi rất mới để lập trình và tôi bắt đầu với Python 3. Tôi bắt đầu đọc "Learn Python the Hard Way". Bây giờ, tôi đã đến một điểm mà tôi đã mã này:LoạiError: loại toán hạng không được hỗ trợ (s) cho%: 'NoneType' và 'str'

x = "There are %d types of people." % 10 
binary = "binary" 
do_not = "don't" 
y = "Those who know %s and those who %s" % (binary, do_not) 

print(x) 
print(y) 
print("I said: %r") % x 

tôi không thực sự biết sự khác biệt giữa %r, %s%d. Lỗi tôi nhận được là TypeError: unsupported operand type(s) for %: 'NoneType' and 'str' Không biết phải làm gì và cách khắc phục. Hãy giải thích làm thế nào tôi thực sự có thể làm cho nó hoạt động và tại sao nó sẽ không hoạt động. Ngoài ra, sự khác nhau giữa% r, d và s là gì? Bất kỳ liên kết hữu ích nào? Cảm ơn bạn trước.

+2

lý do giảm giá? đây là một người dùng mới, chúng ta không đuổi theo anh ta/cô ấy đi mà không có lời giải thích. – markg

+0

@markg Tôi đoán bởi vì câu hỏi này rất nghèo nàn và nó là tầm thường để tìm ra loại điều này. – juanchopanza

+0

@markg vì lỗi báo cho OP chính xác vấn đề là gì? – jonrsharpe

Trả lời

10

Bạn muốn áp dụng % đến chuỗi thay vì:

print("I said: %r" % x) 

Mã của bạn đang áp dụng nó vào giá trị trả về của print() cuộc gọi, mà trả về None.

Ngoài ra, bạn có thể chuyển sang sử dụng str.format():

print("I said: {!r}".format(x)) 
6

Bạn đang gọi % ngoài print() chức năng. Này sẽ cố gắng để xem chức năng thực tế print có thể được in như %r, và vì print không trả lại bất cứ điều gì, nó cố gắng để có được %r cho giá trị None (do đó các lỗi NoneType). Thay đổi nó thành:

print("I said: %r" %(x)) 

Các mã sau đây:

#!/usr/local/bin/python3 
x = "Hello" 
print ("Hello World! %s") %(x) 

Tăng các lỗi sau:

Hello World! %s 
Traceback (most recent call last): 
    File "main.py", line 3, in 
    print ("Hello World! %s") %(x) 
TypeError: unsupported operand type(s) for %: 'NoneType' and 'str' 

Thay đổi mã để các công việc sau:

#!/usr/local/bin/python3 
x = "Hello" 
print ("Hello World! %s" %(x)) 

Output :

Hello World! Hello 
Các vấn đề liên quan