Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

Python.Runtime.PythonException: since Python.NET 3.0 int can not be converted to Enum implicitly. Use Enum(int_value)

Ask Question

I recently moved my code to a new computer at work. A basic example code is as follows (but you wouldn't be able to run it as you can't connect to my server - sorry that I couldn't make it any more reproducible).

With the new computer, I get the following error:

System.ArgumentException: since Python.NET 3.0 int can not be converted to Enum implicitly. Use Enum(int_value) in method OSIsoft.AF.Asset.AFValue RecordedValue(OSIsoft.AF.Time.AFTime, OSIsoft.AF.Data.AFRetrievalMode) ---> Python.Runtime.PythonException: since Python.NET 3.0 int can not be converted to Enum implicitly. Use Enum(int_value)*".

My old computer uses Spyder 4 and Python 3.7 and Python.NET 2.5.2. The new computer uses Spyder 5 and Python 3.9 and Python.NET 3.0. Because of IT restrictions, I am unable to install the same version of Spyder and Python on my computer. However, I do not think it is causing this error.

Would anyone have any idea what would cause an Enum -related problem? Thanks!

import PIconnect as PI
def pidownload(tag):
    with PI.PIServer() as server:
        point = server.search(tag)[0]
        data = point.recorded_value('-1m')
        data=data.to_frame()
    return data
tag='xxxx.pv' #confidential data tag replaced with xxxx
print(pidownload(tag))

Judging by the documentation for the RecordedValue function in OSIsoft's documentation and the documentation for recorded_value in the PIConnect documentation, it seems that the Python-side function is sending an enum and the C#-side function is receiving an enum value. However, when inspecting the GitHub documentation for PIConnect, we can see that the issue is with the retrieval_mode variable, which has a default value of RetrievalMode.AUTO, which is an IntEnum. It appears that the conversion is not working properly, as I noticed this GitHub issue on their repository.

After further inspection, it looks like your issue is an installation problem and can be fixed by reinstalling piconnect, see this question.

Ok got it, I see that you’ve edited and removed “thank you” from my response. I don’t see a need to remove a friendly word from anyone’s response - the world could and should be a kinder place. And I’ve already accepted the answer beforehand. – bitterjam Aug 18, 2022 at 8:05

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.