diff --git a/parsimonious/nodes.py b/parsimonious/nodes.py
index a60e7f4..26d873d 100644
--- a/parsimonious/nodes.py
+++ b/parsimonious/nodes.py
@@ -90,8 +90,10 @@ class Node(StrAndRepr):
 
     def __eq__(self, other):
         """Support by-value deep comparison with other nodes for testing."""
-        return (other is not None and
-                self.expr_name == other.expr_name and
+        if not isinstance(other, Node):
+            return NotImplemented
+
+        return (self.expr_name == other.expr_name and
                 self.full_text == other.full_text and
                 self.start == other.start and
                 self.end == other.end and

Node __eq__ method internal error
`Node`'s `__eq__` method doesn't check the type of the object it's being compared to, which leads to an exception if you try to compare Nodes to non-nodes.  For example, I can do `5 == "hello"` in Python, but if I try `5 == grammar.parse(text)`, I get the following exception:

```
  File "/Users/wiseman/Dropbox/Disney/src/cca_dialogengine/env/lib/python2.7/site-packages/parsimonious/nodes.py", line 90, in __eq__
    self.expr_name == other.expr_name and
AttributeError: 'int' object has no attribute 'expr_name'
```

diff --git a/parsimonious/tests/test_nodes.py b/parsimonious/tests/test_nodes.py
index 404aa36..caf9f68 100644
--- a/parsimonious/tests/test_nodes.py
+++ b/parsimonious/tests/test_nodes.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 from nose import SkipTest
-from nose.tools import eq_, assert_raises
+from nose.tools import eq_, ok_, assert_raises
 
 from parsimonious import Grammar, NodeVisitor, VisitationError, rule
 from parsimonious.nodes import Node
@@ -142,3 +142,9 @@ def test_unwrapped_exceptions():
             raise PrimalScream('This should percolate up!')
 
     assert_raises(PrimalScream, Screamer().parse, 'howdy')
+
+
+def test_node_inequality():
+    node = Node('text', 'o hai', 0, 5)
+    ok_(node != 5)
+    ok_(node != None)

pip install -e .[dev]
parse_log_pytest
six
nose pytest
3.5
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
importlib-metadata==4.8.3
iniconfig==1.1.1
nose==1.3.7
packaging==21.3
-e git+https://github.com/erikrose/parsimonious.git@538aac8454425e72f059fb2ca196a4187be4653f#egg=parsimonious
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
six @ file:///tmp/build/80754af9/six_1644875935023/work
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0

name: parsimonious
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - six=1.16.0=pyhd3eb1b0_1
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - nose==1.3.7
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/parsimonious

parsimonious/tests/test_nodes.py::test_node_inequality
parsimonious/tests/test_nodes.py::test_visitor parsimonious/tests/test_nodes.py::test_visitation_exception parsimonious/tests/test_nodes.py::test_str parsimonious/tests/test_nodes.py::test_repr parsimonious/tests/test_nodes.py::test_parse_shortcut parsimonious/tests/test_nodes.py::test_match_shortcut parsimonious/tests/test_nodes.py::test_rule_decorator parsimonious/tests/test_nodes.py::test_unwrapped_exceptions
parsimonious/nodes.py
parsimonious/nodes.py