I'm writing scripts for Ansys Mechanical, which are written in IronPython 2.7.0.40. In my script, I need to assign a property to ContactTimeStepControls.None
. Note that the None
here is NOT the None
object.[1]
My issue is that the Pylint extension in VS Code is flagging the use of None
here as a syntax error (probably because it thinks it IS the None
object) and refusing to evaluate the rest of the code. Here are there error messages it gives:
SyntaxError: invalid syntax (file:///[PathToMyScript], line 264) compile [Ln 264, Col 80]
Parsing failed: 'invalid syntax (, line 264)' Pylint(E0001:syntax-error) [Ln 264, Col 81]
I've tried disabling that error message the following two ways:
# pylint: disable=syntax-error
Cxn.TimeStepControls = ContactTimeStepControls.None
and
# pylint: disable=E0001
Cxn.TimeStepControls = ContactTimeStepControls.None
Both fail to suppress the error.
Here's a screenshot to demonstrate:
I therefore have three questions:
ContactTimeStepControls
)?[1] Output from dir(ContactTimeStepControls)
is this (see bolded item):
['AutomaticBisection', 'CompareTo', 'Equals', 'Format', 'GetHashCode', 'GetName', 'GetNames', 'GetType', 'GetTypeCode', 'GetUnderlyingType', 'GetValues', 'HasFlag', 'IsDefined', 'MemberwiseClone',
'None', 'Parse', 'PredictForImpact', 'ReferenceEquals', 'ToBoolean', 'ToByte', 'ToChar', 'ToDateTime', 'ToDecimal', 'ToDouble', 'ToInt16', 'ToInt32', 'ToInt64', 'ToObject', 'ToSByte', 'ToSingle', 'ToString', 'ToType', 'ToUInt16', 'ToUInt32', 'ToUInt64', 'TryParse', 'UseImpactConstraints', '__and__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__invert__', '__le__', '__lt__', '__ne__', '__new__', '__nonzero__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__xor__', 'value__']
I just discovered another place where this is likely to occur that will probably be experienced more commonly by people. The DialogResult
property (link) of the System.Windows.Forms
module from Microsoft's .NET API has a None
property, which would produce the same effect.
Instead of using eval
, you can parse the enum from a string
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import DialogResult
result = DialogResult.Parse(DialogResult, "None")
or in Mechanical scripting (tested in 2024 R1)
Cxn.TimeStepControls = ContactTimeStepControls.Parse(ContactTimeStepControls, "None")
Once again not ideal, but at least it avoids the Pylint errors.