New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Misleading reflective behaviour due to PEP 3131 NFKC identifiers normalization. #76664
Comments
Consistent with PEP-3131 and NFKC normalization of identifiers, these two last lines yield an error, since class Base(object):
def __init__(self):
self.𝜏 = 5 # defined with U+1D70F
a = Base()
print(a.𝜏) # 5 # (U+1D70F) expected and intuitive
print(a.τ) # 5 as well # (U+03C4) normalized version, okay.
d = a.__dict__ # {'τ': 5} # (U+03C4) still normalized version
print(d['τ']) # 5 # (U+03C4) consistent with normalization
assert hasattr(a, 'τ') # (U+03C4) consistent with normalization
# But if I want to retrieve it the way I entered it because I can type (U+1D70F)
print(d['𝜏']) # KeyError: '𝜏' # (U+1D70F) counterintuitive
assert hasattr(a, '𝜏') # Fails # (U+1D70F) counterintuitive I've described and undestood the problem in this post. Nothing is unconsistent here. However, I am worried that:
Maybe it is user's responsibility to be aware of this limitation, and to keep considering utf-8 coding a bad practice. In this case, maybe this particular reflective limitation could be made explicit in PEP-3131. Or maybe it is python's responsibility to ensure intuitive and consistent behaviour even in tricky-unicode-cases. So reflective features like
always yields True. I actually have no idea of the philosophy to stick to. And the only purpose of this post is to inform the community about this particular, low-priority case. Thank you for supporting Python anyway, cheers for your patience.. and happy 2018 to everyone :) -- |
I just found out about this very close issue. Much of the philosophy has been made very clear there. Since the solution to bpo-13793 is to *document* much this NFKC normalization. Then I think I'd be a good thing to make an explicit statement about these particular reflective limitations in PEP-3131 :) |
We don't generally update finalized PEPs. The official documentation for a feature is in the Python docs. Feel free to propose a PR if you think it could be improved. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: