我正在使用imp库从字符串(不要问)导入模块。这一切都很好,很花哨,但是当这样的模块出现错误时,我会得到这样的堆栈跟踪:
Traceback (most recent call last):
File "<string>", line 33, in do_something
File "<string>", line 20, in really_do_something
Exception: STRING FILENAME EXAMPLE
Run Code Online (Sandbox Code Playgroud)
我尝试将模块上的文件属性设置为有意义的值,但<string>文件名仍用于异常回溯中。
关于如何指定异常中使用的文件名的任何想法?
更新:我正在使用这样的小鬼:动态模块导入试图在不应该做的时候进行相对导入
在Aptana中配置PyDev的Forced Builtins时,我注意到默认情况下使用_(下划线)前缀引用了一些模块.
所以我打开一个Python解释器,令我惊讶的是,下面的导入工作:
import ast
import _ast
import bisect
import _bisect
import csv
import _csv
# ... and so on
Run Code Online (Sandbox Code Playgroud)
现在,如果我dir()对导入的模块执行操作,我会看到不同的内容:
>>> dir(csv)
['Dialect', 'DictReader', 'DictWriter', 'Error', ...] # and so on
>>> dir(_csv)
['Dialect', 'Error', ...] # node that DictReader and DictWriter are missing
Run Code Online (Sandbox Code Playgroud)
最后,help()告诉我他们显然是不同的模块:
>>> help(_csv)
Help on module _csv:
NAME
_csv - CSV parsing and writing.
FILE
/usr/lib64/python2.6/lib-dynload/_csv.so
...
>>> help(csv)
Help on module csv:
NAME
csv - CSV parsing and …Run Code Online (Sandbox Code Playgroud) 但是已经从另一个程序复制了脚本,这不会出现此错误。我究竟做错了什么?
提前感谢您的建议。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import time
import RPi.GPIO as GPIO
#setup pin 10 as an output
gpio.setmode(gpio.BCM)
gpio.setmode(10, gpio.OUT)
#Make an LED flash on and off forever
while True:
gpio.output(10, gpio.HIGH)
time.sleep(1)
gpio.output(10, gpio.LOW)
time.sleep(1)
Run Code Online (Sandbox Code Playgroud) 有关背景信息:去这里!
我有一个非常大的模块,可以从互联网、其他内置脚本等中获取内容。根据网络速度、内存以及编译列表等因素,导入时间可以在 25 秒到 90 秒之间变化秒。我使用以下代码来跟踪模块导入所需的时间:
def importTime():
import time
startTime = time.time()
import tms # This is the name of my module
print("Time taken {}".format(time.time() - startTime)))
Run Code Online (Sandbox Code Playgroud)
当我运行这个:
>>> importTime()
Loading Module. This may take up to 60 seconds. # This is my module output
Time taken 31.49
Run Code Online (Sandbox Code Playgroud)
这就是我想要发生的事情:
>>> import tms
Loading Module. This may take up to 60 seconds.
Time taken: 31.49 seconds
Run Code Online (Sandbox Code Playgroud)
这是我的问题。这是我必须在导入模块之前定义的函数。我需要能够做的是让我的模块能够在启动时做到这一点。我看过这个问题,但它是相同的概念。有没有人有任何想法?
有没有办法在一个声明中结合导入和导入?
能够:
from random import choice
import random
Run Code Online (Sandbox Code Playgroud)
合并成一个声明?
所以我有两个单独的Python包,我将其导入到我的Raspberry Pi的Python脚本中.在这种情况下;
from rflib import*
from Rpi.GPIO import*
Run Code Online (Sandbox Code Playgroud)
但是,两个包都有自己独立的方法 cleanup(self)
因此,在脚本结束时,当我使用命令时,我
cleanup()如何a)知道方法来自哪个包(它们都完全不同的东西b)控制哪个包运行?
我查看了类似命名的问题,但它们似乎处理继承重载而不是包导入
当尝试Request从urllib.requestPython 2.7 导入时,它无法找到包.
>>> from urllib.request import Request
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named request
Run Code Online (Sandbox Code Playgroud) 我有:
script1.py in database/table_inserts/ #trying to import below file into
dbcrud.py in database/ #trying to import by above file
Run Code Online (Sandbox Code Playgroud)
在script1.py我有:
from ..dbcrud import set_db_setting
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:
from ..dbcrud import set_db_setting
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我是 Python 新手,之前我一直在使用像 Swift 这样的语言,其中导入并不是什么大问题:您只是定义了一个新类,并且可以从程序的另一部分访问它。
我不能在 Python 中使用这种方式,因为这里 import 以另一种方式工作:您不能进行循环导入,其中两个文件相互导入。我知道我因为以错误的方式使用语言而面临这个问题,但我不明白如何避免它。
我的意思是,在大多数情况下,您可以通过将两个类合并到一个文件中来解决这个问题,但感觉不对。另外,我发现了诸如“将您的导入语句移动到文件末尾”之类的建议,但这也不是一个好主意。
如果您愿意,我想了解 Python 的哲学。在决定在一个单独的文件中创建一个类时,我应该如何组织我的项目以及我应该以什么为指导?
假设我有以下伪代码.bla两个文件中的导入是指引用2个实例Bla还是引用同一个实例?换句话说,我可以在Python中连接和断开不同文件中的单个连接吗?
bla.py
import socket
class Bla:
connect(self):
self.connection = socket.socket(...)
disconnect(self):
self.connection.close()
bla = Bla()
Run Code Online (Sandbox Code Playgroud)
hello.py
from bla import bla
bla.connect()
Run Code Online (Sandbox Code Playgroud)
world.py
from bla import bla
bla.disconnect()
Run Code Online (Sandbox Code Playgroud)