unicodescv.reader
expects a file opened in binary mode, because, in theory at least, it is going to work out how to decode the bytes.
with open('hero-network.csv', 'rb') as data: # the mode is 'rb', not 'r'
reader = csv.reader(data)
for row in reader:
graph.add_edge(*row)
As pointed out in the comments by jramsey, unicodecsv
is more useful for Python2, when the standard library's csv module's unicode handling was poor. In Python 3 you can specify an encoding when you open the file and pass the resulting file object to the standard library's csv module.