People take blank slate theory to the extreme <| sep |> Most of the time they agree to plans because thai people dont like saying noThey would rather stick you up then give you a no because they don ' t want to be rude <| sep |> Yeah . I haent even attempted to shoot it yet cause I ' m not too confident with my thumb technique , tried it before and the arrows either flew to my neighbors house or hit a wall several meters away from the target lol <| sep |> so the first half . <| sep |> It ' s a bytes object , not a bytes string . Aka a binary sequence type . A bytes object looks just like a str object with a few minor differences dirx , diry ' add ', ' class ', ' contains ', ' delattr ', ' dir ', ' doc ', ' eq ', ' format ', ' ge ', ' getattribute ', ' getitem ', ' getnewargs ', ' gt ', ' hash ', ' init ', ' iter ', ' le ', ' len ', ' lt ', ' mod ', ' mul ', ' ne ', ' new ', ' reduce ', ' reduceex ', ' repr ', ' rmod ', ' rmul ', ' setattr ', ' sizeof ', ' str ', ' subclasshook ', ' capitalize ', ' casefold ', ' center ', ' count ', ' encode ', ' endswith ', ' expandtabs ', ' find ', ' format ', ' formatmap ', ' index ', ' isalnum ', ' isalpha ', ' isdecimal ', ' isdigit ', ' isidentifier ', ' islower ', ' isnumeric ', ' isprintable ', ' isspace ', ' istitle ', ' isupper ', ' join ', ' ljust ', ' lower ', ' lstrip ', ' maketrans ', ' partition ', ' replace ', ' rfind ', ' rindex ', ' rjust ', ' rpartition ', ' rsplit ', ' rstrip ', ' split ', ' splitlines ', ' startswith ', ' strip ', ' swapcase ', ' title ', ' translate ', ' upper ', ' zfill ', ' add ', ' class ', ' contains ', ' delattr ', ' dir ', ' doc ', ' eq ', ' format ', ' ge ', ' getattribute ', ' getitem ', ' getnewargs ', ' gt ', ' hash ', ' init ', ' iter ', ' le ', ' len ', ' lt ', ' mul ', ' ne ', ' new ', ' reduce ', ' reduceex ', ' repr ', ' rmul ', ' setattr ', ' sizeof ', ' str ', ' subclasshook ', ' capitalize ', ' center ', ' count ', ' decode ', ' endswith ', ' expandtabs ', ' find ', ' fromhex ', ' index ', ' isalnum ', ' isalpha ', ' isdigit ', ' islower ', ' isspace ', ' istitle ', ' isupper ', ' join ', ' ljust ', ' lower ', ' lstrip ', ' maketrans ', ' partition ', ' replace ', ' rfind ', ' rindex ', ' rjust ', ' rpartition ', ' rsplit ', ' rstrip ', ' split ', ' splitlines ', ' startswith ', ' strip ', ' swapcase ', ' title ', ' translate ', ' upper ', ' zfill ' He is not concatenating bytes to bytes , but a unicode string to bytes Yes he isYou are showing his example in Python 2 . He clearly doesn ' t have a problem with Python 2 , but with Python 3 str bytes False type '' is typeu '' True x hello y byteshello , utf 8 typex , typey class ' str ', class ' bytes ' For the record this is the inconsistency the auther is referring to . Laugh all you like , Python 2 . 7 . 6 default , Mar 22 2014 , 225938 GCC 4 . 8 . 2 on linux 2 Type help , copyright , credits or license for more information . x uhello y bytesworld # equivalent to y world xy u ' helloworld ' . formatx , y ' helloworld ' Python 3 . 4 . 0 default , Apr 11 2014 , 130518 GCC 4 . 8 . 2 on linux Type help , copyright , credits or license for more information . x uhello y bytesworld , utf 8 xy Traceback most recent call last File stdin , line 1 , in module TypeError Can ' t convert ' bytes ' object to str implicitly . formatx , y hellob ' world ' xy is an error , but embedding y in a unicode string is not ?