I'm guessing that hex_dig is a bytes object (did you use digest rather than hexdigest to get the hash perhaps?). If that's the case, simply using the right function will sort this out:
sha256_hasher = hashlib.sha256()
sha256_hasher.update(your_data_goes_here)
hex_dig = sha256_hasher.hexdigest()
Otheriwse, and more generally, you're trying to concatenate strs and bytes objects together. You can't do that. You need to convert the bytes object to a string. If it just contains text data you can decode it:
hex_dig = hex_dig.decode("ascii")
Or, if it just contains bytes and you want to see the hex you can use binascii.hexlify (you'll still need to decode as it returns a bytes):
import binascii
hex_dig = binascii.hexlify(hex_dig).decode("ascii")
As an aside, you don't need to wrap a string in the str function call, you only need that if you want to get the string representation of an object that isn't already a string. What you have (or what you want) is already a string so it's a redundant call. You can't try to concatenate things of different types and wrap all that in a str cal and hope python will sort it out for you - it won't (and shouldn't as it's ambiguous - explicit is better than implicit).