【问题标题】:Problem when importing a script into another one将脚本导入另一个脚本时出现问题
【发布时间】:2020-08-09 03:05:17
【问题描述】:

我为带有由步进电机驱动的皮带驱动器的机器人编写了两个脚本。 脚本“DUALSTEPPER_LIBARY_002.py”包含一个 DualStepper 类和一些功能,如前进、后退等。 该脚本应通过导入另一个名为“Testlauf_001.py”的脚本在后台运行。

当我在脚本“DUALSTEPPER_LIBARY_002.py”中创建 DualStepper 类的实例并编写一些使用提供的函数的代码时,我可以毫无问题地执行代码。电机前后移动正常。

一旦我将脚本“DUALSTEPPER_LIBARY_002.py”导入脚本“Testlauf_001.py”,节目就会停止并显示一条错误消息:

Traceback (most recent call last):
  File "/home/pi/Documents/PythonFiles/Stepperbox Amazon/Testlauf_001.py", line 7, in <module>
    antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)
NameError: name 'DualStepper' is not defined

那为什么?有一个名为 DualStepper 的类。怎么可能不定义?

如果有人能告诉我我的 MISTKAE,那就太好了。 谢谢你

这些是重现问题的最短代码示例:

脚本“DUALSTEPPER_LIBARY_002.py”:

import time
import RPi.GPIO as GPIO

class DualStepper:
    def __init__(self, motor_name, direction_pin1, direction_pin2, step_pin1, step_pin2):
        self.motor_name = motor_name
        self.direction_pin1 = direction_pin1
        self.direction_pin2 = direction_pin2
        self.step_pin1 = step_pin1
        self.step_pin2 = step_pin2
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)

    def vorwaerts(self, steps=200, stepdelay=.005, initdelay=.05):
        GPIO.setup(self.direction_pin1, GPIO.OUT)
        GPIO.setup(self.direction_pin2, GPIO.OUT)
        GPIO.setup(self.step_pin1, GPIO.OUT)
        GPIO.setup(self.step_pin2, GPIO.OUT)
        GPIO.output(self.direction_pin1, 1)
        GPIO.output(self.direction_pin2, 0)

        for i in range(steps):
            GPIO.output(self.step_pin1, True)
            GPIO.output(self.step_pin2, True)
            time.sleep(stepdelay)
            GPIO.output(self.step_pin1, False)
            GPIO.output(self.step_pin2, False)
            time.sleep(stepdelay)

            antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)

脚本“Testlauf_001.py”:

import time
import RPi.GPIO as GPIO
import DUALSTEPPER_LIBARY_002

for n in range (3):
    antriebsmotoren.vorwaerts(steps=400, stepdelay=.001, initdelay=.05)
    time.sleep(.5)

GPIO.cleanup()

【问题讨论】:

  • 在脚本 B 中您在哪里导入 DualStepper?什么是DUALSTEPPER_LIBARY_002?请分享您的项目结构
  • 你好 Gabip,“DUALSTEPPER_LIBARY_002”是我的脚本“A”的名称。我将它导入到名为“Testlauf_001.py”的第二个脚本中。两个脚本都在同一个文件夹中。

标签: python initialization undefined python-import stepper


【解决方案1】:

您应该在类定义之外初始化antriebsmotoren 对象。

试试这个:

脚本 A:

import time
import RPi.GPIO as GPIO

class DualStepper:
    def __init__(self, motor_name, direction_pin1, direction_pin2, step_pin1, step_pin2):
        self.motor_name = motor_name
        self.direction_pin1 = direction_pin1
        self.direction_pin2 = direction_pin2
        self.step_pin1 = step_pin1
        self.step_pin2 = step_pin2
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)

    def vorwaerts(self, steps=200, stepdelay=.005, initdelay=.05):
        GPIO.setup(self.direction_pin1, GPIO.OUT)
        GPIO.setup(self.direction_pin2, GPIO.OUT)
        GPIO.setup(self.step_pin1, GPIO.OUT)
        GPIO.setup(self.step_pin2, GPIO.OUT)
        GPIO.output(self.direction_pin1, 1)
        GPIO.output(self.direction_pin2, 0)

        for i in range(steps):
            GPIO.output(self.step_pin1, True)
            GPIO.output(self.step_pin2, True)
            time.sleep(stepdelay)
            GPIO.output(self.step_pin1, False)
            GPIO.output(self.step_pin2, False)
            time.sleep(stepdelay)

antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)

脚本 B:

import time
import RPi.GPIO as GPIO
from DUALSTEPPER_LIBARY_002 import antriebsmotoren

for n in range (3):
    antriebsmotoren.vorwaerts(steps=400, stepdelay=.001, initdelay=.05)
    time.sleep(.5)

GPIO.cleanup()

【讨论】:

  • 亲爱的 Gabip,非常感谢您的快速帮助。这是我第一次尝试编写自己的类和函数......像我这样的小错误能够阻止整个事情。 100分!谢谢!
  • 乐于提供帮助 :) 如果对您有帮助,请考虑接受答案。
  • 这只是我第二次来这里。我点了勾。也感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多