2010-05-12 34 views
29

tôi nhận được lỗi này khi cố gắng để có một số nguyên và thêm vào trước "b" với nó, biến nó thành một chuỗi:Làm một chuỗi ra khỏi một chuỗi và một số nguyên bằng Python

File "program.py", line 19, in getname 
    name = "b" + num 
TypeError: Can't convert 'int' object to str implicitly 

Đó là liên quan đến này chức năng:

num = random.randint(1,25) 
name = "b" + num 
+0

[Câu trả lời SO này] (https://stackoverflow.com/a/6380529/2071807) giải quyết tại sao Python không chỉ truyền RHS của '+' vào một 'str' giống như Javascript. Tôi rất ngạc nhiên nhưng câu trả lời đó giải thích tốt. – LondonRob

Trả lời

34
name = 'b' + str(num) 

hoặc

name = 'b%s' % num 

dưới dạng ghi chú S.Lott, toán tử trộn lẫn '%' không còn được dùng cho Python 3 trở lên. Và tôi đã đánh cắp cái tên "trộn lẫn" từ INTERCAL nhưng đó là cách tôi nói về nó và muốn thấy nó trong bản in ít nhất một lần trước đây - như dodo - nó biến mất khỏi mặt đất.

+0

% không được dùng nữa trong Python 3. Có thể muốn xóa phần đó. –

+3

@ S.Lott Tôi phải làm việc trên một số hệ thống sử dụng python <2.6, cụ thể là Ubuntu 8.04. Tôi đã không nhận ra .format không có sẵn, và sau khi phát triển mã trên Python 2.6, phải đi và thay đổi tất cả các lệnh .format thành% là một chút đau. Vì vậy, trên thực tế, trong khi tôi thích .format, nếu bạn cần tương thích với mọi phiên bản,% vẫn là đặt cược tốt nhất của bạn - nó hiện diện trong Python 3, trong khi .format không có trong python 2.5 và dưới đây. – JAL

+3

@ S.Lott% không được dùng nữa trong Python3. [PEP 3101] (https://www.python.org/dev/peps/pep-3101/) đề cập rõ ràng rằng * Hệ thống mới không va chạm với bất kỳ tên phương thức nào của các kỹ thuật định dạng chuỗi hiện có, vì vậy cả hai hệ thống có thể cùng tồn tại cho đến khi mất thời gian để ngưng sử dụng hệ thống cũ hơn. * –

3

Vâng, python không có int ẩn đối với chuyển đổi chuỗi.

thử str(num) thay

7

Python sẽ không tự động chuyển đổi loại theo cách mà ngôn ngữ như JavaScript hoặc PHP làm.

Bạn phải chuyển đổi nó thành chuỗi hoặc sử dụng phương pháp định dạng.

name="b"+str(num) 

hoặc printf các định dạng kiểu ...

name="b%s" % (num,) 

hoặc chuỗi .format mới phương pháp

name="b{0}".format(num) 
+0

% không được dùng trong Python 3. Có thể muốn loại bỏ nó. –

+2

Tôi không thể chỉnh sửa nó ngay bây giờ, vì vậy lưu ý ở đây rằng% không được chấp nhận. Cũng đáng nói là .format không có sẵn trước Python 2.6. – JAL

1
name = "b{0:d}".format(num) 
2

câu trả lời chính xác đã được đưa ra nhưng tôi muốn kêu vang trong và nói rằng bạn nên luôn luôn sử dụng str (var) mỗi khi bạn định sử dụng var như tring, bất kể bạn có biết đó là một chuỗi hay không.

An toàn hơn xin lỗi.

+0

Nhưng, điều tồi tệ nhất có thể xảy ra là gì? Một TypeError? – Kudu

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