我继承了一些代码,这些代码由于在打印调用期间引发输入/输出错误而定期(随机)失败.我试图确定引发异常的原因(或至少,更好地理解它)以及如何正确处理它.
执行以下Python行时(在2.6.6解释器中,在CentOS 5.5上运行):
print >> sys.stderr, 'Unable to do something: %s' % command
Run Code Online (Sandbox Code Playgroud)
引发异常(省略回溯):
IOError: [Errno 5] Input/output error
Run Code Online (Sandbox Code Playgroud)
对于上下文,这通常是当时较大的函数尝试执行的操作:
from subprocess import Popen, PIPE
import sys
def run_commands(commands):
for command in commands:
try:
out, err = Popen(command, shell=True, stdout=PIPE, stderr=PIPE).communicate()
print >> sys.stdout, out
if err:
raise Exception('ERROR -- an error occurred when executing this command: %s --- err: %s' % (command, err))
except:
print >> sys.stderr, 'Unable to do something: %s' % command
run_commands(["ls", "echo foo"])
Run Code Online (Sandbox Code Playgroud)
该>> …
我在这个论坛中遇到过一些例子,通过测试(或这些天?)中的errno值来处理文件和目录的特定错误.例如,这里的一些讨论 - Python的"open()"会为"找不到文件"抛出不同的错误 - 如何处理这两个异常?.但是,我认为,这不是正确的方法.毕竟,存在一个专门避免担心.OSErrorIOErrorFileExistsErrorerrno
以下尝试无效,因为我收到令牌的错误FileExistsError.
try:
os.mkdir(folderPath)
except FileExistsError:
print 'Directory not created.'
Run Code Online (Sandbox Code Playgroud)
你如何具体检查这个和类似的其他错误?
我正在使用scikit-learn为LDA模型提供大量数据.相关代码片段如下所示:
lda = LatentDirichletAllocation(n_topics = n_topics,
max_iter = iters,
learning_method = 'online',
learning_offset = offset,
random_state = 0,
evaluate_every = 5,
n_jobs = 3,
verbose = 0)
lda.fit(X)
Run Code Online (Sandbox Code Playgroud)
(我想这里唯一可能相关的细节是我正在使用多个工作.)
经过一段时间后,即使磁盘上有足够的空间和足够的可用内存,我也会收到"设备上没有剩余空间"错误.我在两台不同的计算机上(在我的本地计算机和远程服务器上)多次尝试相同的代码,首先使用python3,然后使用python2,每次我都得到相同的错误.
如果我在较小的数据样本上运行相同的代码,一切正常.
整个堆栈跟踪:
Failed to save <type 'numpy.ndarray'> to .npy file:
Traceback (most recent call last):
File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.py", line 271, in save
obj, filename = self._write_array(obj, filename)
File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.py", line 231, in _write_array
self.np.save(filename, array)
File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.py", line 491, in save
pickle_kwargs=pickle_kwargs)
File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/numpy/lib/format.py", line 584, in write_array
array.tofile(fp)
IOError: 275500 …Run Code Online (Sandbox Code Playgroud) 当我使用multiprocessing.Queue.get时,由于EINTR,我有时会得到一个异常.
我肯定知道有时这种情况没有任何理由(我在tmux buffr中打开另一个窗格),在这种情况下我想继续工作并重试该操作.
我可以想象,在其他一些情况下,错误是由于一个很好的理由,我应该停止运行或修复一些错误.
我该如何区分这两者?
提前致谢
我尝试重新创建virtualenv:
foo_bar_d@aptguettler:~$ virtualenv --system-site-packages .
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
foo_bar_d@aptguettler:~$ virtualenv --system-site-packages .
New python executable in /home/foo_bar_d/bin/python
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 711, in main
symlink=options.symlink)
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 924, in create_environment
site_packages=site_packages, clear=clear, symlink=symlink))
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 1230, in install_python
shutil.copyfile(executable, py_executable)
File "/usr/lib/python2.7/shutil.py", line 83, in copyfile
with open(dst, 'wb') as fdst:
IOError: [Errno 26] Text file busy: '/home/foo_bar_d/bin/python'
Run Code Online (Sandbox Code Playgroud)
有人知道为什么会发生这种异常吗?
我写了一个方法来做一些东西并捕获坏的文件名.应该发生的是如果路径不存在,它会抛出一个IOError.但是,它认为我的异常处理是错误的语法......为什么?
def whatever():
try:
# do stuff
# and more stuff
except IOError:
# do this
pass
whatever()
但在它进入调用之前whatever(),它会打印以下内容:
Traceback (most recent call last):
File "", line 1, in
File "getquizzed.py", line 55
except IOError:
^
SyntaxError: invalid syntax
进口时......帮忙?!
如果非root用户为root拥有的文件运行以下代码,则会抛出错误,即使非root用户具有sudo权限:
try:
f = open(filename, "w+")
except IOError:
sys.stderr.write('Error: Failed to open file %s' % (filename))
f.write(response + "\n" + new_line)
f.close()
Run Code Online (Sandbox Code Playgroud)
有没有办法open(filename, "w+")使用sudo权限运行,或者执行此操作的替代功能?
我一直收到以下错误.
IOError: [Errno 22] invalid mode ('wb') or filename: 'C:\\Users\\Viral Patel\\Documents\\GitHub\\3DPhotovoltaics\\Data_Output\\Simulation_Data\\Raw_Data\\Raw_Simulation_Data_2014-03-24 17:21:20.545000.csv'
Run Code Online (Sandbox Code Playgroud)
我认为这是由于文件名末尾的时间戳.有任何想法吗?
我正在尝试打印在我的格式化的元组列表stdout.为此,我使用str.format方法.一切正常,但是当我输出输出以使用head命令a 查看第一行时IOError.
这是我的代码:
# creating the data
data = []$
for i in range(0, 1000):
pid = 'pid%d' % i
uid = 'uid%d' % i
pname = 'pname%d' % i
data.append( (pid, uid, pname) )
# find max leghed string for each field
pids, uids, pnames = zip(*data)
max_pid = len("%s" % max( pids) )
max_uid = len("%s" % max( uids) )
max_pname = len("%s" % max( pnames) )
# my template …Run Code Online (Sandbox Code Playgroud) 我们目前正在将我们的Rails应用程序升级到Rails 4.在3.2中,我们的Cucumber(1.3.17)测试运行良好(如果可悲的缓慢),与Capybara(2.4.4),Poltergeist(1.5.1)和PhantomJS(1.9. 8)引擎盖下.
但是在4.0.12和4.1.8中,我们stream closed (IOError)在运行中得到一个随机点:
stream closed (IOError)
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/formatter/pretty.rb:156:in `write'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/formatter/pretty.rb:156:in `puts'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/formatter/pretty.rb:156:in `step_name'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:181:in `block in send_to_all'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:179:in `each'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:179:in `send_to_all'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:173:in `broadcast'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:119:in `visit_step_name'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:112:in `block in visit_step_result'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:111:in `visit_step_result'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/step_invocation.rb:43:in `visit_step_result'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/step_invocation.rb:39:in `accept'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:106:in `block in visit_step'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:105:in `visit_step'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/step_collection.rb:19:in `block in accept'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/step_collection.rb:18:in `each'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/step_collection.rb:18:in `accept'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:100:in `block in visit_steps'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:99:in `visit_steps'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/ast/tree_walker.rb:15:in `block in execute'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/runtime.rb:83:in `block (2 levels) in with_hooks'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/runtime.rb:99:in `before_and_after'
/var/lib/jenkins/.rvm/gems/ruby-2.1.5@tallama-integration/gems/cucumber-1.3.17/lib/cucumber/runtime.rb:82:in `block in …Run Code Online (Sandbox Code Playgroud) ioerror ×10
python ×9
exception ×2
broken-pipe ×1
cucumber ×1
file-io ×1
file-writing ×1
format ×1
io ×1
queue ×1
ruby ×1
scikit-learn ×1
stdout ×1
try-catch ×1
virtualenv ×1