0

I am currently porting Python 2.7 code over to Python 3 and I am having trouble determining what the best approach to handle strings.

I have Python scripts which have the following imports:

from __future__ import print_function from __future__ import division from __future__ import absolute_import from __future__ import unicode_literals 

Now since the unicode_literals converts all of my strings in Python 2.7 scripts, I get errors like this in my script:

TypeError: expecting a string or number, unicode found TypeError: Argument 'key' has incorrect type (expected str, got unicode) 

Now I can get rid of the errors in Python2.7 by simply adding .encode('utf-8') to every string. For example:

scanline_node['projection_mode'].setValue("uv") TypeError: expecting a string or number, unicode found scanline_node['projection_mode'].setValue("uv".encode('utf-8')) 

My problem is that when I start using Python 3, that won't work because it will make the type of string to bytes.

My question is, what is the best way to handle this type of issue so that my code will work on Python 2.7 and Python 3? Should I just use the builtin str()?

Thanks!

Jared

1 Answer 1

1

You should be using the six library. It helps code work on both Python 2 & 3. Six contains a type called six.text_type which is unicode on Python 2, and str on Python 3. You can then use that as the type your function expects.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.