Я копался в методе _to_ascii()
, на который ссылается ваша трассировка, который содержит этот код (из последней версии Z3Prover / z3, z3-4.8.7 ):
z3 / z3core.py @ 69
def _to_ascii(s):
if isinstance(s, str):
try:
return s.encode('ascii')
except:
# kick the bucket down the road. :-J
return s
else:
return s
В try
вы заметите, что он выполняет кодировку ascii
для s
(где s
- имя функции Вы переходите к конструктору Function
), который соответствует имени метода. Очевидно, что ваше имя "人間" не может быть закодировано как ASCII, поэтому кодирование здесь не выполняется. В конечном итоге это всплывает, вызывая ArgumentError
, который вы видите.
Глядя на код, я подозреваю, что любые источники, которые вы видели, говоря, что z3 поддерживает японские имена, были неверными. Вы можете попытаться отправить сообщение об ошибке на z3 GitHub о сбое, но, видя, что метод называется _to_ascii()
, я не вижу, чтобы он привлекал много внимания (возможно, запрос на добавление?).
сказал, что вы можете изменить код здесь, чтобы позволить вашему японскому имени функции:
def _to_ascii(s):
if isinstance(s, str):
try:
return s.encode('utf-8') # <- Note the change in encoding here
except:
# kick the bucket down the road. :-J
return s
else:
return s
После этого я смог запустить ваш код ( после переименовав вашу переменную socrates
в soc
:))